/*
 * ExerciseGeneratorGUI.java Created on 16. únor 2009, 13:48
 */

package generator.modules.reglang;

import java.awt.Toolkit;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.filechooser.FileNameExtensionFilter;

/**
 * The class stands for the graphical user interface. This application generates the exercises for converting regular
 * languages representations among themselves
 * 
 * @author Jana Kadlecova
 */
@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
public class ExerciseGeneratorGUI extends javax.swing.JFrame
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	// variables declaration
	private JPanel selectedPanel;
	private List<JPanel> panels;
	// set Toolkit to get informations about current screen
	final Toolkit t = Toolkit.getDefaultToolkit();
	final int MIN_WIDTH = 957;
	final int MIN_HEIGHT = 641;
	final int MAX_WIDTH = t.getScreenSize().width;
	final int MAX_HEIGHT = t.getScreenSize().height;
	private T1Generator t1;
	private T2Generator t2;
	private T0Generator t0;
	private T3Generator t3;

	/** Creates new form ExerciseGeneratorGUI */
	public ExerciseGeneratorGUI()
	{
		initComponents();
		panels = new ArrayList<JPanel>();
		panels.add(type0JPanel);
		panels.add(type1JPanel);
		panels.add(type2JPanel);
		panels.add(type3JPanel);
		// the panel must have the same number as the layer
		for (JPanel panel : panels)
		{
			panel.setVisible(false);
		}
		selectedPanel = type0JPanel;
		selectedPanel.setVisible(true);
		resizeFrame();
		// the position in the middle of the screen
		this.setLocation((t.getScreenSize().width / 2) - (this.getWidth() / 2), this.getY());
		// save, copy, save all, copy all buttons are disabled
		this.setButtonsEnabled(false);
		this.stopJButton.setEnabled(false);
		this.setGeneratingEnabled(false);
	}

	/**
	 * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The
	 * content of this method is always regenerated by the Form Editor.
	 */
	// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
	private void initComponents()
	{

		type0Automaton1buttonGroup = new javax.swing.ButtonGroup();
		type0Automaton2buttonGroup = new javax.swing.ButtonGroup();
		typeJComboBox = new javax.swing.JComboBox();
		typeJLayeredPane = new javax.swing.JLayeredPane();
		type0JPanel = new javax.swing.JPanel();
		type0Automaton1JPanel = new javax.swing.JPanel();
		type0Automaton1StatesJLabel = new javax.swing.JLabel();
		type0Automaton1FinalStatesJLabel = new javax.swing.JLabel();
		type0Automaton1TransitionsJLabel = new javax.swing.JLabel();
		type0Automaton1AlphabetJLabel = new javax.swing.JLabel();
		type0Automaton1AlphabetMinJLabel = new javax.swing.JLabel();
		type0Automaton1StatesMinJLabel = new javax.swing.JLabel();
		type0Automaton1FinalStatesMinJLabel = new javax.swing.JLabel();
		type0Automaton1TransitionsMinJLabel = new javax.swing.JLabel();
		type0Automaton1AlphabetMinJTextField = new javax.swing.JTextField();
		type0Automaton1StatesMinJTextField = new javax.swing.JTextField();
		type0Automaton1FinalStatesMinJTextField = new javax.swing.JTextField();
		type0Automaton1TransitionsMinJTextField = new javax.swing.JTextField();
		type0Automaton1AlphabetMaxJLabel = new javax.swing.JLabel();
		type0Automaton1StatesMaxJLabel = new javax.swing.JLabel();
		type0Automaton1FinalStatesMaxJLabel = new javax.swing.JLabel();
		type0Automaton1TransitionsMaxJLabel = new javax.swing.JLabel();
		type0Automaton1AlphabetMaxJTextField = new javax.swing.JTextField();
		type0Automaton1StatesMaxJTextField = new javax.swing.JTextField();
		type0Automaton1FinalStatesMaxJTextField = new javax.swing.JTextField();
		type0Automaton1TransitionsMaxJTextField = new javax.swing.JTextField();
		type0AlphabetJComboBox = new javax.swing.JComboBox();
		type0Automaton1StatesJComboBox = new javax.swing.JComboBox();
		type0Automaton1TotalTransitionFunctionJCheckBox = new javax.swing.JCheckBox();
		type0Automaton2JPanel = new javax.swing.JPanel();
		type0Automaton2StatesMinJLabel = new javax.swing.JLabel();
		type0Automaton2FinalStatesMinJLabel = new javax.swing.JLabel();
		type0Automaton2TransitionsMinJLabel = new javax.swing.JLabel();
		type0Automaton2StatesMinJTextField = new javax.swing.JTextField();
		type0Automaton2FinalStatesMinJTextField = new javax.swing.JTextField();
		type0Automaton2TransitionsMinJTextField = new javax.swing.JTextField();
		type0Automaton2StatesMaxJLabel = new javax.swing.JLabel();
		type0Automaton2FinalStatesMaxJLabel = new javax.swing.JLabel();
		type0Automaton2TransitionsMaxJLabel = new javax.swing.JLabel();
		type0Automaton2StatesMaxJTextField = new javax.swing.JTextField();
		type0Automaton2FinalStatesMaxJTextField = new javax.swing.JTextField();
		type0Automaton2TransitionsMaxJTextField = new javax.swing.JTextField();
		type0Automaton2StatesJLabel = new javax.swing.JLabel();
		type0Automaton2FinalStatesJLabel = new javax.swing.JLabel();
		type0Automaton2TransitionsJLabel = new javax.swing.JLabel();
		type0Automaton2StatesJComboBox = new javax.swing.JComboBox();
		type0Automaton2TotalTransitionFunctionJCheckBox = new javax.swing.JCheckBox();
		type0OperationJPanel = new javax.swing.JPanel();
		type0Automaton1JRadioButton = new javax.swing.JRadioButton();
		type0Automaton1CoJRadioButton = new javax.swing.JRadioButton();
		type0Automaton2JRadioButton = new javax.swing.JRadioButton();
		type0Automaton2CoJRadioButton = new javax.swing.JRadioButton();
		type0OperationJComboBox = new javax.swing.JComboBox();
		type0OutputAutomatonJPanel = new javax.swing.JPanel();
		type0OutputAutomatonStatesJLabel = new javax.swing.JLabel();
		type0OutputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type0OutputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type0OutputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type0OutputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type0OutputAutomatonMinOneFinalStateJCheckBox = new javax.swing.JCheckBox();
		type0OutputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type0OutputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type0OutputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type0OutputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type0OutputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type1JPanel = new javax.swing.JPanel();
		type1InputAutomantonJPanel = new javax.swing.JPanel();
		type1InputAutomatonStatesJLabel = new javax.swing.JLabel();
		type1InputAutomatonFinalStatesJLabel = new javax.swing.JLabel();
		type1InputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type1InputAutomatonAlphabetJLabel = new javax.swing.JLabel();
		type1InputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonFinalStatesMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonAlphabetMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonFinalStatesMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonAlphabetMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonFinalStatesMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonAlphabetMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type1InputAutomatonFinalStatesMaxJTextField = new javax.swing.JTextField();
		type1InputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type1InputAutomatonAlphabetMaxJTextField = new javax.swing.JTextField();
		type1InputAutomatonAlphabetJComboBox = new javax.swing.JComboBox();
		type1InputAutomatonStatesJComboBox = new javax.swing.JComboBox();
		type1InputAutomatonFirstStateJCheckBox = new javax.swing.JCheckBox();
		type1InputAutomatonTotalTransitionFunctionJCheckBox = new javax.swing.JCheckBox();
		type1InputAutomatonUnreachableStates1JLabel = new javax.swing.JLabel();
		type1InputAutomatonUnreachableStates2jLabel = new javax.swing.JLabel();
		type1InputAutomatonUnreachableStatesMinJLabel = new javax.swing.JLabel();
		type1InputAutomatonUnreachableStatesMinJTextField = new javax.swing.JTextField();
		type1InputAutomatonUnreachableStatesMaxJLabel = new javax.swing.JLabel();
		type1InputAutomatonUnreachableStatesMaxJTextField = new javax.swing.JTextField();
		type1OutputAutomatonJPanel = new javax.swing.JPanel();
		type1OutputAutomatonStatesJLabel = new javax.swing.JLabel();
		type1OutputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type1OutputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type1OutputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type1OutputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type1OutputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type1OutputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type1OutputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type1OutputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type1OutputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type1MinimizationJPanel = new javax.swing.JPanel();
		type1MinimizationStepsJCheckBox = new javax.swing.JCheckBox();
		type1MinimizationStepsJLabel = new javax.swing.JLabel();
		type1MinimizationStepsMinJTextField = new javax.swing.JTextField();
		type1MinimizationStepsMinJLabel = new javax.swing.JLabel();
		type1MinimizationStepsMaxJLabel = new javax.swing.JLabel();
		type1MinimizationStepsMaxJTextField = new javax.swing.JTextField();
		type1OperationJPanel = new javax.swing.JPanel();
		type1OperationFromJLabel = new javax.swing.JLabel();
		type1OperationFromJComboBox = new javax.swing.JComboBox();
		type1OperationToJLabel = new javax.swing.JLabel();
		type1OperationToJComboBox = new javax.swing.JComboBox();
		type2JPanel = new javax.swing.JPanel();
		type2OperationJLabel = new javax.swing.JLabel();
		type2OperationJComboBox = new javax.swing.JComboBox();
		type2JLayeredPane = new javax.swing.JLayeredPane();
		type2InputGrammarJPanel = new javax.swing.JPanel();
		type2InputGrammarVariablesJLabel = new javax.swing.JLabel();
		type2InputGrammarRulesJLabel = new javax.swing.JLabel();
		type2InputGrammarVariablesMinJLabel = new javax.swing.JLabel();
		type2InputGrammarRulesMinJLabel = new javax.swing.JLabel();
		type2InputGrammarVariablesMinJTextField = new javax.swing.JTextField();
		type2InputGrammarRulesMinJTextField = new javax.swing.JTextField();
		type2InputGrammarVariablesMaxJLabel = new javax.swing.JLabel();
		type2InputGrammarRulesMaxJLabel = new javax.swing.JLabel();
		type2InputGrammarVariablesMaxJTextField = new javax.swing.JTextField();
		type2InputGrammarRulesMaxJTextField = new javax.swing.JTextField();
		type2InputGrammarTerminalsJLabel = new javax.swing.JLabel();
		type2InputGrammarTerminalsMinJLabel = new javax.swing.JLabel();
		type2InputGrammarTerminalsMinJTextField = new javax.swing.JTextField();
		type2InputGrammarTerminalsMaxJLabel = new javax.swing.JLabel();
		type2InputGrammarTerminalsMaxJTextField = new javax.swing.JTextField();
		type2InputGrammarEpsilonJCheckBox = new javax.swing.JCheckBox();
		type2InputGrammarTerminalsJComboBox = new javax.swing.JComboBox();
		type2InputGrammarVariablesJComboBox = new javax.swing.JComboBox();
		type2OutputAutomatonJPanel = new javax.swing.JPanel();
		type2OutputAutomatonAlphabetJLabel = new javax.swing.JLabel();
		type2OutputAutomatonAlphabetMinJLabel = new javax.swing.JLabel();
		type2OutputAutomatonAlphabetMaxJLabel = new javax.swing.JLabel();
		type2OutputAutomatonAlphabetMinJTextField = new javax.swing.JTextField();
		type2OutputAutomatonAlphabetMaxJTextField = new javax.swing.JTextField();
		type2OutputAutomatonStatesJLabel = new javax.swing.JLabel();
		type2OutputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type2OutputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type2OutputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type2OutputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type2OutputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type2OutputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type2OutputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type2OutputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type2OutputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type2OutputAutomatonUnreachableStates1JLabel = new javax.swing.JLabel();
		type2OutputAutomatonUnreachableStatesMinJLabel = new javax.swing.JLabel();
		type2OutputAutomatonUnreachableStatesMaxJLabel = new javax.swing.JLabel();
		type2OutputAutomatonUnreachableStatesMinJTextField = new javax.swing.JTextField();
		type2OutputAutomatonUnreachableStatesMaxJTextField = new javax.swing.JTextField();
		type2OutputAutomatonUnreachableStates2JLabel = new javax.swing.JLabel();
		type2InputAutomatonJPanel = new javax.swing.JPanel();
		type2InputAutomatonAlphabetJLabel = new javax.swing.JLabel();
		type2InputAutomatonStatesJLabel = new javax.swing.JLabel();
		type2InputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type2InputAutomatonFinalStatesJLabel = new javax.swing.JLabel();
		type2InputAutomatonAlphabetMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonFinalStatesMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonAlphabetMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonFinalStatesMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonAlphabetMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonFinalStatesMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonAlphabetMaxJTextField = new javax.swing.JTextField();
		type2InputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type2InputAutomatonFinalStatesMaxJTextField = new javax.swing.JTextField();
		type2InputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type2InputAutomatonAlphabetJComboBox = new javax.swing.JComboBox();
		type2InputAutomatonStatesJComboBox = new javax.swing.JComboBox();
		type2InputAutomatonUnreachableStates1JLabel = new javax.swing.JLabel();
		type2InputAutomatonUnreachableStates2JLabel = new javax.swing.JLabel();
		type2InputAutomatonUnreachableStatesMinJLabel = new javax.swing.JLabel();
		type2InputAutomatonUnreachableStatesMinJTextField = new javax.swing.JTextField();
		type2InputAutomatonUnreachableStatesMaxJLabel = new javax.swing.JLabel();
		type2InputAutomatonUnreachableStatesMaxJTextField = new javax.swing.JTextField();
		type2OutputGrammarJPanel = new javax.swing.JPanel();
		type2OutputGrammarVariablesJLabel = new javax.swing.JLabel();
		type2OutputGrammarTerminalsJLabel = new javax.swing.JLabel();
		type2OutputGrammarRulesJLabel = new javax.swing.JLabel();
		type2OutputGrammarVariablesMinJLabel = new javax.swing.JLabel();
		type2OutputGrammarTerminalsMinJLabel = new javax.swing.JLabel();
		type2OutputGrammarRulesMinJLabel = new javax.swing.JLabel();
		type2OutputGrammarVariablesMaxJLabel = new javax.swing.JLabel();
		type2OutputGrammarTerminalsMaxJLabel = new javax.swing.JLabel();
		type2OutputGrammarRulesMaxJLabel = new javax.swing.JLabel();
		type2OutputGrammarVariablesMinJTextField = new javax.swing.JTextField();
		type2OutputGrammarTerminalsMinJTextField = new javax.swing.JTextField();
		type2OutputGrammarRulesMinJTextField = new javax.swing.JTextField();
		type2OutputGrammarVariablesMaxJTextField = new javax.swing.JTextField();
		type2OutputGrammarTerminalsMaxJTextField = new javax.swing.JTextField();
		type2OutputGrammarRulesMaxJTextField = new javax.swing.JTextField();
		type2OutputGRammarEpsilonJCheckBox = new javax.swing.JCheckBox();
		type3JPanel = new javax.swing.JPanel();
		type3OperationJLabel = new javax.swing.JLabel();
		type3OperationJComboBox = new javax.swing.JComboBox();
		type3jLayeredPane = new javax.swing.JLayeredPane();
		type3InputAutomatonJPanel = new javax.swing.JPanel();
		type3InputAutomatonStatesJLabel = new javax.swing.JLabel();
		type3InputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type3InputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type3InputAutomatonFinalStatesJLabel = new javax.swing.JLabel();
		type3InputAutomatonFinalStatesMinJLabel = new javax.swing.JLabel();
		type3InputAutomatonFinalStatesMaxJLabel = new javax.swing.JLabel();
		type3InputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type3InputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type3InputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type3InputAutomatonAlphabetJLabel = new javax.swing.JLabel();
		type3InputAutomatonAlphabetMinJLabel = new javax.swing.JLabel();
		type3InputAutomatonAlphabetMaxJLabel = new javax.swing.JLabel();
		type3InputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type3InputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type3InputAutomatonFinalStatesMinJTextField = new javax.swing.JTextField();
		type3InputAutomatonFinalStatesMaxJTextField = new javax.swing.JTextField();
		type3InputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type3InputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type3InputAutomatonAlphabetMinJTextField = new javax.swing.JTextField();
		type3InputAutomatonAlphabetMaxJTextField = new javax.swing.JTextField();
		type3InputAutomatonAlphabetJComboBox = new javax.swing.JComboBox();
		type3InputAutomatonStatesJComboBox = new javax.swing.JComboBox();
		type3InputREJPanel = new javax.swing.JPanel();
		type3InputREAlphabetJLabel = new javax.swing.JLabel();
		type3InputREAlphabetMinJLabel = new javax.swing.JLabel();
		type3InputREAlphabetMaxJLabel = new javax.swing.JLabel();
		type3InputREAlphabetMinJTextField = new javax.swing.JTextField();
		type3InputREAlphabetMaxJTextField = new javax.swing.JTextField();
		type3InputReAlphabetJComboBox = new javax.swing.JComboBox();
		type3InputRELengthJLabel = new javax.swing.JLabel();
		type3InputRELengthMinJLabel = new javax.swing.JLabel();
		type3InputRELengthMaxJLabel = new javax.swing.JLabel();
		type3InputRELengthMinJTextField = new javax.swing.JTextField();
		type3InputRELengthMaxJTextField = new javax.swing.JTextField();
		type3OutputAutomatonJPanel = new javax.swing.JPanel();
		type3OutputAutomatonStatesJLabel = new javax.swing.JLabel();
		type3OutputAutomatonStatesMinJLabel = new javax.swing.JLabel();
		type3OutputAutomatonStatesMaxJLabel = new javax.swing.JLabel();
		type3OutputAutomatonTransitionsJLabel = new javax.swing.JLabel();
		type3OutputAutomatonTransitionsMinJLabel = new javax.swing.JLabel();
		type3OutputAutomatonTransitionsMaxJLabel = new javax.swing.JLabel();
		type3OutputAutomatonStatesMinJTextField = new javax.swing.JTextField();
		type3OutputAutomatonTransitionsMinJTextField = new javax.swing.JTextField();
		type3OutputAutomatonStatesMaxJTextField = new javax.swing.JTextField();
		type3OutputAutomatonTransitionsMaxJTextField = new javax.swing.JTextField();
		type3OutputAutomatonStatesJComboBox = new javax.swing.JComboBox();
		type3OutputREJPanel = new javax.swing.JPanel();
		type3OutputREAlphabetJLabel = new javax.swing.JLabel();
		type3OutputREAlphabetMinJLabel = new javax.swing.JLabel();
		type3OutputREAlphabetMinJTextField = new javax.swing.JTextField();
		type3OutputREAlphabetMaxJLabel = new javax.swing.JLabel();
		type3OutputREAlphabetMaxJTextField = new javax.swing.JTextField();
		type3OutputRELengthJLabel = new javax.swing.JLabel();
		type3OutputRELengthMinJLabel = new javax.swing.JLabel();
		type3OutputRELengthMaxJLabel = new javax.swing.JLabel();
		type3OutputRELengthMinJTextField = new javax.swing.JTextField();
		type3OutputRELengthMaxJTextField = new javax.swing.JTextField();
		generatingJPanel = new javax.swing.JPanel();
		exercisesJLabel = new javax.swing.JLabel();
		exercisesJTextField = new javax.swing.JTextField();
		generateJButton = new javax.swing.JButton();
		stopJButton = new javax.swing.JButton();
		progressJLabel = new javax.swing.JLabel();
		completedExercisesJLabel = new javax.swing.JLabel();
		jProgressBar = new javax.swing.JProgressBar();
		outputJTabbedPane = new javax.swing.JTabbedPane();
		plainTextJScrollPane = new javax.swing.JScrollPane();
		plainTextJTextArea = new javax.swing.JTextArea();
		latexJScrollPane = new javax.swing.JScrollPane();
		latexJTextArea = new javax.swing.JTextArea();
		isJScrollPane = new javax.swing.JScrollPane();
		isJTextArea = new javax.swing.JTextArea();
		plainTextENJScrollPane = new javax.swing.JScrollPane();
		plainTextENJTextArea = new javax.swing.JTextArea();
		latexENJScrollPane = new javax.swing.JScrollPane();
		latexENJTextArea = new javax.swing.JTextArea();
		isENJScrollPane = new javax.swing.JScrollPane();
		isENJTextArea = new javax.swing.JTextArea();
		copyAllJButton = new javax.swing.JButton();
		saveJButton = new javax.swing.JButton();
		saveAllJButton = new javax.swing.JButton();
		copyJButton = new javax.swing.JButton();

		setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
		setTitle("EXERCISE GENERATOR FOR REGULAR LANGUAGES");
		setMinimumSize(new java.awt.Dimension(957, 641));
		setName("frame"); // NOI18N
		addComponentListener(new java.awt.event.ComponentAdapter()
		{
			public void componentResized(java.awt.event.ComponentEvent evt)
			{
				formComponentResized(evt);
			}
		});
		getContentPane().setLayout(null);

		typeJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		typeJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "synchronous parallel composition",
			"transformation between various kinds of FA", "equivalence of finite automata and regular grammars ",
			"equivalence of finite automata and regular expressions" }));
		typeJComboBox.setName("typeJComboBox"); // NOI18N
		typeJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				typeJComboBoxActionPerformed(evt);
			}
		});
		getContentPane().add(typeJComboBox);
		typeJComboBox.setBounds(30, 10, 520, 21);

		typeJLayeredPane.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

		type0JPanel.setLayout(null);

		type0Automaton1JPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Automaton A",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type0Automaton1JPanel.setLayout(null);

		type0Automaton1StatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1StatesJLabel.setText("States");
		type0Automaton1JPanel.add(type0Automaton1StatesJLabel);
		type0Automaton1StatesJLabel.setBounds(10, 60, 80, 15);

		type0Automaton1FinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1FinalStatesJLabel.setText("Final states");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesJLabel);
		type0Automaton1FinalStatesJLabel.setBounds(10, 90, 80, 15);

		type0Automaton1TransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1TransitionsJLabel.setText("Transitions");
		type0Automaton1JPanel.add(type0Automaton1TransitionsJLabel);
		type0Automaton1TransitionsJLabel.setBounds(10, 120, 80, 20);

		type0Automaton1AlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1AlphabetJLabel.setText("Alphabet");
		type0Automaton1JPanel.add(type0Automaton1AlphabetJLabel);
		type0Automaton1AlphabetJLabel.setBounds(10, 30, 70, 15);

		type0Automaton1AlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1AlphabetMinJLabel.setText("min");
		type0Automaton1JPanel.add(type0Automaton1AlphabetMinJLabel);
		type0Automaton1AlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type0Automaton1StatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1StatesMinJLabel.setText("min");
		type0Automaton1JPanel.add(type0Automaton1StatesMinJLabel);
		type0Automaton1StatesMinJLabel.setBounds(100, 60, 30, 15);

		type0Automaton1FinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1FinalStatesMinJLabel.setText("min");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesMinJLabel);
		type0Automaton1FinalStatesMinJLabel.setBounds(100, 90, 30, 15);

		type0Automaton1TransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1TransitionsMinJLabel.setText("min");
		type0Automaton1JPanel.add(type0Automaton1TransitionsMinJLabel);
		type0Automaton1TransitionsMinJLabel.setBounds(100, 120, 30, 15);

		type0Automaton1AlphabetMinJTextField.setText("2");
		type0Automaton1JPanel.add(type0Automaton1AlphabetMinJTextField);
		type0Automaton1AlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type0Automaton1StatesMinJTextField.setText("2");
		type0Automaton1JPanel.add(type0Automaton1StatesMinJTextField);
		type0Automaton1StatesMinJTextField.setBounds(130, 60, 60, 20);

		type0Automaton1FinalStatesMinJTextField.setText("1");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesMinJTextField);
		type0Automaton1FinalStatesMinJTextField.setBounds(130, 90, 60, 20);

		type0Automaton1TransitionsMinJTextField.setText("2");
		type0Automaton1JPanel.add(type0Automaton1TransitionsMinJTextField);
		type0Automaton1TransitionsMinJTextField.setBounds(130, 120, 60, 20);

		type0Automaton1AlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1AlphabetMaxJLabel.setText("max");
		type0Automaton1JPanel.add(type0Automaton1AlphabetMaxJLabel);
		type0Automaton1AlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type0Automaton1StatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1StatesMaxJLabel.setText("max");
		type0Automaton1JPanel.add(type0Automaton1StatesMaxJLabel);
		type0Automaton1StatesMaxJLabel.setBounds(210, 60, 30, 15);

		type0Automaton1FinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1FinalStatesMaxJLabel.setText("max");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesMaxJLabel);
		type0Automaton1FinalStatesMaxJLabel.setBounds(210, 90, 30, 15);

		type0Automaton1TransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1TransitionsMaxJLabel.setText("max");
		type0Automaton1JPanel.add(type0Automaton1TransitionsMaxJLabel);
		type0Automaton1TransitionsMaxJLabel.setBounds(210, 120, 30, 15);

		type0Automaton1AlphabetMaxJTextField.setText("3");
		type0Automaton1JPanel.add(type0Automaton1AlphabetMaxJTextField);
		type0Automaton1AlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type0Automaton1StatesMaxJTextField.setText("5");
		type0Automaton1JPanel.add(type0Automaton1StatesMaxJTextField);
		type0Automaton1StatesMaxJTextField.setBounds(240, 60, 60, 20);

		type0Automaton1FinalStatesMaxJTextField.setText("3");
		type0Automaton1JPanel.add(type0Automaton1FinalStatesMaxJTextField);
		type0Automaton1FinalStatesMaxJTextField.setBounds(240, 90, 60, 20);

		type0Automaton1TransitionsMaxJTextField.setText("6");
		type0Automaton1JPanel.add(type0Automaton1TransitionsMaxJTextField);
		type0Automaton1TransitionsMaxJTextField.setBounds(240, 120, 60, 20);

		type0AlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0AlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...", "A, B, C...",
			"1, 2, 3...", "x, y, z...", "X, Y, Z...", "t0, t1, t2...", "p0, p1, p2...", "I, II, III, IV...",
			"i, ii, iii, iv...", "1, 10, 11, 100..." }));
		type0Automaton1JPanel.add(type0AlphabetJComboBox);
		type0AlphabetJComboBox.setBounds(340, 30, 130, 21);

		type0Automaton1StatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1StatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0, s1, s2..." }));
		type0Automaton1StatesJComboBox.setSelectedIndex(5);
		type0Automaton1JPanel.add(type0Automaton1StatesJComboBox);
		type0Automaton1StatesJComboBox.setBounds(340, 60, 130, 21);

		type0Automaton1TotalTransitionFunctionJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1TotalTransitionFunctionJCheckBox.setText("total transition function");
		type0Automaton1JPanel.add(type0Automaton1TotalTransitionFunctionJCheckBox);
		type0Automaton1TotalTransitionFunctionJCheckBox.setBounds(340, 90, 160, 23);

		type0JPanel.add(type0Automaton1JPanel);
		type0Automaton1JPanel.setBounds(0, 70, 520, 160);

		type0Automaton2JPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Automaton B",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type0Automaton2JPanel.setLayout(null);

		type0Automaton2StatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2StatesMinJLabel.setText("min");
		type0Automaton2JPanel.add(type0Automaton2StatesMinJLabel);
		type0Automaton2StatesMinJLabel.setBounds(100, 30, 30, 15);

		type0Automaton2FinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2FinalStatesMinJLabel.setText("min");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesMinJLabel);
		type0Automaton2FinalStatesMinJLabel.setBounds(100, 60, 30, 15);

		type0Automaton2TransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2TransitionsMinJLabel.setText("min");
		type0Automaton2JPanel.add(type0Automaton2TransitionsMinJLabel);
		type0Automaton2TransitionsMinJLabel.setBounds(100, 90, 30, 15);

		type0Automaton2StatesMinJTextField.setText("1");
		type0Automaton2JPanel.add(type0Automaton2StatesMinJTextField);
		type0Automaton2StatesMinJTextField.setBounds(130, 30, 60, 20);

		type0Automaton2FinalStatesMinJTextField.setText("1");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesMinJTextField);
		type0Automaton2FinalStatesMinJTextField.setBounds(130, 60, 60, 20);

		type0Automaton2TransitionsMinJTextField.setText("2");
		type0Automaton2JPanel.add(type0Automaton2TransitionsMinJTextField);
		type0Automaton2TransitionsMinJTextField.setBounds(130, 90, 60, 20);

		type0Automaton2StatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2StatesMaxJLabel.setText("max");
		type0Automaton2JPanel.add(type0Automaton2StatesMaxJLabel);
		type0Automaton2StatesMaxJLabel.setBounds(210, 30, 30, 15);

		type0Automaton2FinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2FinalStatesMaxJLabel.setText("max");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesMaxJLabel);
		type0Automaton2FinalStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type0Automaton2TransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2TransitionsMaxJLabel.setText("max");
		type0Automaton2JPanel.add(type0Automaton2TransitionsMaxJLabel);
		type0Automaton2TransitionsMaxJLabel.setBounds(210, 90, 30, 15);

		type0Automaton2StatesMaxJTextField.setText("3");
		type0Automaton2JPanel.add(type0Automaton2StatesMaxJTextField);
		type0Automaton2StatesMaxJTextField.setBounds(240, 30, 60, 20);

		type0Automaton2FinalStatesMaxJTextField.setText("2");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesMaxJTextField);
		type0Automaton2FinalStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type0Automaton2TransitionsMaxJTextField.setText("6");
		type0Automaton2JPanel.add(type0Automaton2TransitionsMaxJTextField);
		type0Automaton2TransitionsMaxJTextField.setBounds(240, 90, 60, 20);

		type0Automaton2StatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2StatesJLabel.setText("States");
		type0Automaton2JPanel.add(type0Automaton2StatesJLabel);
		type0Automaton2StatesJLabel.setBounds(10, 30, 60, 15);

		type0Automaton2FinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2FinalStatesJLabel.setText("Final states");
		type0Automaton2JPanel.add(type0Automaton2FinalStatesJLabel);
		type0Automaton2FinalStatesJLabel.setBounds(10, 60, 80, 15);

		type0Automaton2TransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2TransitionsJLabel.setText("Transitions");
		type0Automaton2JPanel.add(type0Automaton2TransitionsJLabel);
		type0Automaton2TransitionsJLabel.setBounds(10, 90, 70, 15);

		type0Automaton2StatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2StatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0, s1, s2..." }));
		type0Automaton2JPanel.add(type0Automaton2StatesJComboBox);
		type0Automaton2StatesJComboBox.setBounds(340, 30, 130, 21);

		type0Automaton2TotalTransitionFunctionJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2TotalTransitionFunctionJCheckBox.setText("total transition function");
		type0Automaton2JPanel.add(type0Automaton2TotalTransitionFunctionJCheckBox);
		type0Automaton2TotalTransitionFunctionJCheckBox.setBounds(340, 60, 160, 23);

		type0JPanel.add(type0Automaton2JPanel);
		type0Automaton2JPanel.setBounds(0, 230, 520, 120);

		type0OperationJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Operation",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type0OperationJPanel.setLayout(null);

		type0Automaton1buttonGroup.add(type0Automaton1JRadioButton);
		type0Automaton1JRadioButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1JRadioButton.setSelected(true);
		type0Automaton1JRadioButton.setText("L(A)");
		type0OperationJPanel.add(type0Automaton1JRadioButton);
		type0Automaton1JRadioButton.setBounds(20, 20, 80, 23);

		type0Automaton1buttonGroup.add(type0Automaton1CoJRadioButton);
		type0Automaton1CoJRadioButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton1CoJRadioButton.setText("co-L(A)");
		type0OperationJPanel.add(type0Automaton1CoJRadioButton);
		type0Automaton1CoJRadioButton.setBounds(20, 40, 80, 23);

		type0Automaton2buttonGroup.add(type0Automaton2JRadioButton);
		type0Automaton2JRadioButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2JRadioButton.setSelected(true);
		type0Automaton2JRadioButton.setText("L(B)");
		type0OperationJPanel.add(type0Automaton2JRadioButton);
		type0Automaton2JRadioButton.setBounds(330, 20, 100, 23);

		type0Automaton2buttonGroup.add(type0Automaton2CoJRadioButton);
		type0Automaton2CoJRadioButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0Automaton2CoJRadioButton.setText("co-L(B)");
		type0OperationJPanel.add(type0Automaton2CoJRadioButton);
		type0Automaton2CoJRadioButton.setBounds(330, 40, 90, 23);

		type0OperationJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OperationJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "union", "intersection",
			"difference" }));
		type0OperationJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type0OperationJComboBoxActionPerformed(evt);
			}
		});
		type0OperationJPanel.add(type0OperationJComboBox);
		type0OperationJComboBox.setBounds(120, 30, 190, 21);

		type0JPanel.add(type0OperationJPanel);
		type0OperationJPanel.setBounds(0, 0, 520, 70);

		type0OutputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type0OutputAutomatonJPanel.setLayout(null);

		type0OutputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonStatesJLabel.setText("States");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesJLabel);
		type0OutputAutomatonStatesJLabel.setBounds(10, 30, 50, 15);

		type0OutputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonStatesMinJLabel.setText("min");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesMinJLabel);
		type0OutputAutomatonStatesMinJLabel.setBounds(100, 30, 30, 15);

		type0OutputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonStatesMaxJLabel.setText("max");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesMaxJLabel);
		type0OutputAutomatonStatesMaxJLabel.setBounds(210, 30, 30, 15);

		type0OutputAutomatonStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesMinJTextField);
		type0OutputAutomatonStatesMinJTextField.setBounds(130, 30, 60, 20);

		type0OutputAutomatonStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type0OutputAutomatonJPanel.add(type0OutputAutomatonStatesMaxJTextField);
		type0OutputAutomatonStatesMaxJTextField.setBounds(240, 30, 60, 20);

		type0OutputAutomatonMinOneFinalStateJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonMinOneFinalStateJCheckBox.setText("min one final state");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonMinOneFinalStateJCheckBox);
		type0OutputAutomatonMinOneFinalStateJCheckBox.setBounds(340, 30, 140, 23);

		type0OutputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonTransitionsJLabel.setText("Transitions");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsJLabel);
		type0OutputAutomatonTransitionsJLabel.setBounds(10, 60, 70, 15);

		type0OutputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonTransitionsMinJLabel.setText("min");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsMinJLabel);
		type0OutputAutomatonTransitionsMinJLabel.setBounds(100, 60, 30, 15);

		type0OutputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type0OutputAutomatonTransitionsMaxJLabel.setText("max");
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsMaxJLabel);
		type0OutputAutomatonTransitionsMaxJLabel.setBounds(210, 60, 30, 15);

		type0OutputAutomatonTransitionsMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsMinJTextField);
		type0OutputAutomatonTransitionsMinJTextField.setBounds(130, 60, 60, 20);

		type0OutputAutomatonTransitionsMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type0OutputAutomatonJPanel.add(type0OutputAutomatonTransitionsMaxJTextField);
		type0OutputAutomatonTransitionsMaxJTextField.setBounds(240, 60, 60, 20);

		type0JPanel.add(type0OutputAutomatonJPanel);
		type0OutputAutomatonJPanel.setBounds(0, 350, 520, 90);

		type0JPanel.setBounds(0, 0, 530, 450);
		typeJLayeredPane.add(type0JPanel, javax.swing.JLayeredPane.DEFAULT_LAYER);

		type1JPanel.setLayout(null);

		type1InputAutomantonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type1InputAutomantonJPanel.setLayout(null);

		type1InputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonStatesJLabel.setText("States");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesJLabel);
		type1InputAutomatonStatesJLabel.setBounds(10, 60, 80, 15);

		type1InputAutomatonFinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonFinalStatesJLabel.setText("Final states");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesJLabel);
		type1InputAutomatonFinalStatesJLabel.setBounds(10, 90, 80, 15);

		type1InputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonTransitionsJLabel.setText("Transitions");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsJLabel);
		type1InputAutomatonTransitionsJLabel.setBounds(10, 120, 80, 15);

		type1InputAutomatonAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonAlphabetJLabel.setText("Alphabet");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetJLabel);
		type1InputAutomatonAlphabetJLabel.setBounds(10, 30, 80, 15);

		type1InputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonStatesMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesMinJLabel);
		type1InputAutomatonStatesMinJLabel.setBounds(100, 60, 30, 15);

		type1InputAutomatonFinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonFinalStatesMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesMinJLabel);
		type1InputAutomatonFinalStatesMinJLabel.setBounds(100, 90, 30, 15);

		type1InputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonTransitionsMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsMinJLabel);
		type1InputAutomatonTransitionsMinJLabel.setBounds(100, 120, 30, 15);

		type1InputAutomatonAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonAlphabetMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetMinJLabel);
		type1InputAutomatonAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type1InputAutomatonStatesMinJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesMinJTextField);
		type1InputAutomatonStatesMinJTextField.setBounds(130, 60, 60, 20);

		type1InputAutomatonFinalStatesMinJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesMinJTextField);
		type1InputAutomatonFinalStatesMinJTextField.setBounds(130, 90, 60, 20);

		type1InputAutomatonTransitionsMinJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsMinJTextField);
		type1InputAutomatonTransitionsMinJTextField.setBounds(130, 120, 60, 20);

		type1InputAutomatonAlphabetMinJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetMinJTextField);
		type1InputAutomatonAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type1InputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonStatesMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesMaxJLabel);
		type1InputAutomatonStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type1InputAutomatonFinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonFinalStatesMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesMaxJLabel);
		type1InputAutomatonFinalStatesMaxJLabel.setBounds(210, 90, 30, 15);

		type1InputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonTransitionsMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsMaxJLabel);
		type1InputAutomatonTransitionsMaxJLabel.setBounds(210, 120, 30, 15);

		type1InputAutomatonAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonAlphabetMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetMaxJLabel);
		type1InputAutomatonAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type1InputAutomatonStatesMaxJTextField.setText("5");
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesMaxJTextField);
		type1InputAutomatonStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type1InputAutomatonFinalStatesMaxJTextField.setText("1");
		type1InputAutomantonJPanel.add(type1InputAutomatonFinalStatesMaxJTextField);
		type1InputAutomatonFinalStatesMaxJTextField.setBounds(240, 90, 60, 20);

		type1InputAutomatonTransitionsMaxJTextField.setText("5");
		type1InputAutomantonJPanel.add(type1InputAutomatonTransitionsMaxJTextField);
		type1InputAutomatonTransitionsMaxJTextField.setBounds(240, 120, 60, 20);

		type1InputAutomatonAlphabetMaxJTextField.setText("2");
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetMaxJTextField);
		type1InputAutomatonAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type1InputAutomatonAlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonAlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z..." }));
		type1InputAutomantonJPanel.add(type1InputAutomatonAlphabetJComboBox);
		type1InputAutomatonAlphabetJComboBox.setBounds(340, 30, 130, 21);

		type1InputAutomatonStatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonStatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0 , s1 , s2..." }));
		type1InputAutomatonStatesJComboBox.setSelectedIndex(6);
		type1InputAutomantonJPanel.add(type1InputAutomatonStatesJComboBox);
		type1InputAutomatonStatesJComboBox.setBounds(340, 60, 130, 21);

		type1InputAutomatonFirstStateJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonFirstStateJCheckBox.setText("the first state not initial");
		type1InputAutomantonJPanel.add(type1InputAutomatonFirstStateJCheckBox);
		type1InputAutomatonFirstStateJCheckBox.setBounds(330, 90, 180, 23);

		type1InputAutomatonTotalTransitionFunctionJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonTotalTransitionFunctionJCheckBox.setText("total transition function");
		type1InputAutomantonJPanel.add(type1InputAutomatonTotalTransitionFunctionJCheckBox);
		type1InputAutomatonTotalTransitionFunctionJCheckBox.setBounds(330, 120, 160, 23);

		type1InputAutomatonUnreachableStates1JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonUnreachableStates1JLabel.setText("Unreachable");
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStates1JLabel);
		type1InputAutomatonUnreachableStates1JLabel.setBounds(10, 150, 80, 20);

		type1InputAutomatonUnreachableStates2jLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonUnreachableStates2jLabel.setText("states");
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStates2jLabel);
		type1InputAutomatonUnreachableStates2jLabel.setBounds(10, 170, 50, 15);

		type1InputAutomatonUnreachableStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonUnreachableStatesMinJLabel.setText("min");
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStatesMinJLabel);
		type1InputAutomatonUnreachableStatesMinJLabel.setBounds(100, 150, 30, 15);

		type1InputAutomatonUnreachableStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStatesMinJTextField);
		type1InputAutomatonUnreachableStatesMinJTextField.setBounds(130, 150, 60, 20);

		type1InputAutomatonUnreachableStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1InputAutomatonUnreachableStatesMaxJLabel.setText("max");
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStatesMaxJLabel);
		type1InputAutomatonUnreachableStatesMaxJLabel.setBounds(210, 150, 30, 15);

		type1InputAutomatonUnreachableStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1InputAutomantonJPanel.add(type1InputAutomatonUnreachableStatesMaxJTextField);
		type1InputAutomatonUnreachableStatesMaxJTextField.setBounds(240, 150, 60, 20);

		type1JPanel.add(type1InputAutomantonJPanel);
		type1InputAutomantonJPanel.setBounds(0, 70, 520, 200);

		type1OutputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type1OutputAutomatonJPanel.setLayout(null);

		type1OutputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonStatesJLabel.setText("States");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesJLabel);
		type1OutputAutomatonStatesJLabel.setBounds(10, 30, 80, 15);

		type1OutputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonStatesMinJLabel.setText("min");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesMinJLabel);
		type1OutputAutomatonStatesMinJLabel.setBounds(100, 30, 30, 15);

		type1OutputAutomatonStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesMinJTextField);
		type1OutputAutomatonStatesMinJTextField.setBounds(130, 30, 60, 20);

		type1OutputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonStatesMaxJLabel.setText("max");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesMaxJLabel);
		type1OutputAutomatonStatesMaxJLabel.setBounds(210, 30, 30, 15);

		type1OutputAutomatonStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1OutputAutomatonJPanel.add(type1OutputAutomatonStatesMaxJTextField);
		type1OutputAutomatonStatesMaxJTextField.setBounds(240, 30, 60, 20);

		type1OutputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonTransitionsJLabel.setText("Transitions");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsJLabel);
		type1OutputAutomatonTransitionsJLabel.setBounds(10, 60, 80, 15);

		type1OutputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonTransitionsMinJLabel.setText("min");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsMinJLabel);
		type1OutputAutomatonTransitionsMinJLabel.setBounds(100, 60, 30, 15);

		type1OutputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OutputAutomatonTransitionsMaxJLabel.setText("max");
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsMaxJLabel);
		type1OutputAutomatonTransitionsMaxJLabel.setBounds(210, 60, 30, 15);

		type1OutputAutomatonTransitionsMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsMinJTextField);
		type1OutputAutomatonTransitionsMinJTextField.setBounds(130, 60, 60, 20);

		type1OutputAutomatonTransitionsMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type1OutputAutomatonJPanel.add(type1OutputAutomatonTransitionsMaxJTextField);
		type1OutputAutomatonTransitionsMaxJTextField.setBounds(240, 60, 60, 20);

		type1JPanel.add(type1OutputAutomatonJPanel);
		type1OutputAutomatonJPanel.setBounds(0, 270, 520, 100);

		type1MinimizationJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Minimization",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type1MinimizationJPanel.setLayout(null);

		type1MinimizationStepsJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1MinimizationStepsJCheckBox.setText("write out");
		type1MinimizationJPanel.add(type1MinimizationStepsJCheckBox);
		type1MinimizationStepsJCheckBox.setBounds(350, 30, 90, 23);

		type1MinimizationStepsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1MinimizationStepsJLabel.setText("Steps");
		type1MinimizationJPanel.add(type1MinimizationStepsJLabel);
		type1MinimizationStepsJLabel.setBounds(10, 30, 50, 15);

		type1MinimizationStepsMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(
			153, 255, 102)));
		type1MinimizationJPanel.add(type1MinimizationStepsMinJTextField);
		type1MinimizationStepsMinJTextField.setBounds(130, 30, 60, 20);

		type1MinimizationStepsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1MinimizationStepsMinJLabel.setText("min");
		type1MinimizationJPanel.add(type1MinimizationStepsMinJLabel);
		type1MinimizationStepsMinJLabel.setBounds(100, 30, 30, 15);

		type1MinimizationStepsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1MinimizationStepsMaxJLabel.setText("max");
		type1MinimizationJPanel.add(type1MinimizationStepsMaxJLabel);
		type1MinimizationStepsMaxJLabel.setBounds(210, 30, 30, 15);

		type1MinimizationStepsMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(
			153, 255, 102)));
		type1MinimizationJPanel.add(type1MinimizationStepsMaxJTextField);
		type1MinimizationStepsMaxJTextField.setBounds(240, 30, 60, 20);

		type1JPanel.add(type1MinimizationJPanel);
		type1MinimizationJPanel.setBounds(0, 370, 520, 70);

		type1OperationJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Operations",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type1OperationJPanel.setLayout(null);

		type1OperationFromJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OperationFromJLabel.setText("from");
		type1OperationJPanel.add(type1OperationFromJLabel);
		type1OperationFromJLabel.setBounds(20, 30, 30, 20);

		type1OperationFromJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OperationFromJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
			"NFA with ε-transitions", "NFA", "DFA", "minimal DFA" }));
		type1OperationFromJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type1OperationFromJComboBoxActionPerformed(evt);
			}
		});
		type1OperationJPanel.add(type1OperationFromJComboBox);
		type1OperationFromJComboBox.setBounds(60, 30, 190, 21);

		type1OperationToJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OperationToJLabel.setText("to");
		type1OperationJPanel.add(type1OperationToJLabel);
		type1OperationToJLabel.setBounds(280, 30, 20, 20);

		type1OperationToJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type1OperationToJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "NFA", "DFA",
			"minimal DFA", "canonical DFA" }));
		type1OperationToJComboBox.setMinimumSize(new java.awt.Dimension(159, 20));
		type1OperationToJComboBox.setName("Operations: to");
		type1OperationToJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type1OperationToJComboBoxActionPerformed(evt);
			}
		});
		type1OperationJPanel.add(type1OperationToJComboBox);
		type1OperationToJComboBox.setBounds(300, 30, 190, 21);

		type1JPanel.add(type1OperationJPanel);
		type1OperationJPanel.setBounds(0, 0, 520, 70);

		type1JPanel.setBounds(0, 0, 530, 450);
		typeJLayeredPane.add(type1JPanel, new Integer(1));

		type2JPanel.setLayout(null);

		type2OperationJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OperationJLabel.setText("Operation");
		type2JPanel.add(type2OperationJLabel);
		type2OperationJLabel.setBounds(10, 10, 70, 15);

		type2OperationJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OperationJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "NFA  -> regular grammar",
			"regular grammar -> NFA" }));
		type2OperationJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type2OperationJComboBoxActionPerformed(evt);
			}
		});
		type2JPanel.add(type2OperationJComboBox);
		type2OperationJComboBox.setBounds(110, 10, 250, 21);

		type2InputGrammarJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input grammar",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type2InputGrammarJPanel.setLayout(null);

		type2InputGrammarVariablesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarVariablesJLabel.setText("Non-terminals");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesJLabel);
		type2InputGrammarVariablesJLabel.setBounds(10, 60, 90, 15);

		type2InputGrammarRulesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarRulesJLabel.setText("Rules");
		type2InputGrammarJPanel.add(type2InputGrammarRulesJLabel);
		type2InputGrammarRulesJLabel.setBounds(10, 90, 60, 15);

		type2InputGrammarVariablesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarVariablesMinJLabel.setText("min");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesMinJLabel);
		type2InputGrammarVariablesMinJLabel.setBounds(100, 60, 30, 15);

		type2InputGrammarRulesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarRulesMinJLabel.setText("min");
		type2InputGrammarJPanel.add(type2InputGrammarRulesMinJLabel);
		type2InputGrammarRulesMinJLabel.setBounds(100, 90, 30, 15);

		type2InputGrammarVariablesMinJTextField.setText("1");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesMinJTextField);
		type2InputGrammarVariablesMinJTextField.setBounds(130, 60, 60, 20);

		type2InputGrammarRulesMinJTextField.setText("3");
		type2InputGrammarJPanel.add(type2InputGrammarRulesMinJTextField);
		type2InputGrammarRulesMinJTextField.setBounds(130, 90, 60, 20);

		type2InputGrammarVariablesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarVariablesMaxJLabel.setText("max");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesMaxJLabel);
		type2InputGrammarVariablesMaxJLabel.setBounds(210, 60, 30, 15);

		type2InputGrammarRulesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarRulesMaxJLabel.setText("max");
		type2InputGrammarJPanel.add(type2InputGrammarRulesMaxJLabel);
		type2InputGrammarRulesMaxJLabel.setBounds(210, 90, 30, 15);

		type2InputGrammarVariablesMaxJTextField.setText("4");
		type2InputGrammarJPanel.add(type2InputGrammarVariablesMaxJTextField);
		type2InputGrammarVariablesMaxJTextField.setBounds(240, 60, 60, 20);

		type2InputGrammarRulesMaxJTextField.setText("8");
		type2InputGrammarJPanel.add(type2InputGrammarRulesMaxJTextField);
		type2InputGrammarRulesMaxJTextField.setBounds(240, 90, 60, 20);

		type2InputGrammarTerminalsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarTerminalsJLabel.setText("Terminals");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsJLabel);
		type2InputGrammarTerminalsJLabel.setBounds(10, 30, 70, 15);

		type2InputGrammarTerminalsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarTerminalsMinJLabel.setText("min");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsMinJLabel);
		type2InputGrammarTerminalsMinJLabel.setBounds(100, 30, 30, 15);

		type2InputGrammarTerminalsMinJTextField.setText("1");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsMinJTextField);
		type2InputGrammarTerminalsMinJTextField.setBounds(130, 30, 60, 20);

		type2InputGrammarTerminalsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarTerminalsMaxJLabel.setText("max");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsMaxJLabel);
		type2InputGrammarTerminalsMaxJLabel.setBounds(210, 30, 30, 15);

		type2InputGrammarTerminalsMaxJTextField.setText("3");
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsMaxJTextField);
		type2InputGrammarTerminalsMaxJTextField.setBounds(240, 30, 60, 20);

		type2InputGrammarEpsilonJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarEpsilonJCheckBox.setText("epsilon rule");
		type2InputGrammarJPanel.add(type2InputGrammarEpsilonJCheckBox);
		type2InputGrammarEpsilonJCheckBox.setBounds(340, 90, 110, 23);

		type2InputGrammarTerminalsJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarTerminalsJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"1, 2, 3...", "x, y, z...", "t0, t1, t2", "p0, p1, p2...", "i, ii, iii, iv...", "1, 10, 11, 100.." }));
		type2InputGrammarTerminalsJComboBox.setSelectedIndex(2);
		type2InputGrammarJPanel.add(type2InputGrammarTerminalsJComboBox);
		type2InputGrammarTerminalsJComboBox.setBounds(340, 30, 130, 21);

		type2InputGrammarVariablesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputGrammarVariablesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "A, B, C...",
			"X, Y, Z...", "q0, q1, q2...", "s0, s1, s2...", "I, II, III, IV..." }));
		type2InputGrammarJPanel.add(type2InputGrammarVariablesJComboBox);
		type2InputGrammarVariablesJComboBox.setBounds(340, 60, 130, 21);

		type2InputGrammarJPanel.setBounds(0, 0, 520, 130);
		type2JLayeredPane.add(type2InputGrammarJPanel, new Integer(1));

		type2OutputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type2OutputAutomatonJPanel.setLayout(null);

		type2OutputAutomatonAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonAlphabetJLabel.setText("Alphabet");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetJLabel);
		type2OutputAutomatonAlphabetJLabel.setBounds(10, 30, 60, 15);

		type2OutputAutomatonAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonAlphabetMinJLabel.setText("min");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetMinJLabel);
		type2OutputAutomatonAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type2OutputAutomatonAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonAlphabetMaxJLabel.setText("max");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetMaxJLabel);
		type2OutputAutomatonAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type2OutputAutomatonAlphabetMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetMinJTextField);
		type2OutputAutomatonAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type2OutputAutomatonAlphabetMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonAlphabetMaxJTextField);
		type2OutputAutomatonAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type2OutputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonStatesJLabel.setText("States");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesJLabel);
		type2OutputAutomatonStatesJLabel.setBounds(10, 60, 60, 15);

		type2OutputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonTransitionsJLabel.setText("Transitions");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsJLabel);
		type2OutputAutomatonTransitionsJLabel.setBounds(10, 90, 80, 15);

		type2OutputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonStatesMinJLabel.setText("min");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesMinJLabel);
		type2OutputAutomatonStatesMinJLabel.setBounds(100, 60, 30, 15);

		type2OutputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonTransitionsMinJLabel.setText("min");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsMinJLabel);
		type2OutputAutomatonTransitionsMinJLabel.setBounds(100, 90, 30, 15);

		type2OutputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonStatesMaxJLabel.setText("max");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesMaxJLabel);
		type2OutputAutomatonStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type2OutputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonTransitionsMaxJLabel.setText("max");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsMaxJLabel);
		type2OutputAutomatonTransitionsMaxJLabel.setBounds(210, 90, 30, 15);

		type2OutputAutomatonStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesMinJTextField);
		type2OutputAutomatonStatesMinJTextField.setBounds(130, 60, 60, 20);

		type2OutputAutomatonTransitionsMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsMinJTextField);
		type2OutputAutomatonTransitionsMinJTextField.setBounds(130, 90, 60, 20);

		type2OutputAutomatonStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonStatesMaxJTextField);
		type2OutputAutomatonStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type2OutputAutomatonTransitionsMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonTransitionsMaxJTextField);
		type2OutputAutomatonTransitionsMaxJTextField.setBounds(240, 90, 60, 20);

		type2OutputAutomatonUnreachableStates1JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonUnreachableStates1JLabel.setText("Unreachable");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStates1JLabel);
		type2OutputAutomatonUnreachableStates1JLabel.setBounds(10, 120, 80, 15);

		type2OutputAutomatonUnreachableStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonUnreachableStatesMinJLabel.setText("min");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStatesMinJLabel);
		type2OutputAutomatonUnreachableStatesMinJLabel.setBounds(100, 120, 30, 15);

		type2OutputAutomatonUnreachableStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonUnreachableStatesMaxJLabel.setText("max");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStatesMaxJLabel);
		type2OutputAutomatonUnreachableStatesMaxJLabel.setBounds(210, 120, 30, 15);

		type2OutputAutomatonUnreachableStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStatesMinJTextField);
		type2OutputAutomatonUnreachableStatesMinJTextField.setBounds(130, 120, 60, 20);

		type2OutputAutomatonUnreachableStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStatesMaxJTextField);
		type2OutputAutomatonUnreachableStatesMaxJTextField.setBounds(240, 120, 60, 20);

		type2OutputAutomatonUnreachableStates2JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputAutomatonUnreachableStates2JLabel.setText("states");
		type2OutputAutomatonJPanel.add(type2OutputAutomatonUnreachableStates2JLabel);
		type2OutputAutomatonUnreachableStates2JLabel.setBounds(10, 140, 50, 15);

		type2OutputAutomatonJPanel.setBounds(0, 130, 520, 170);
		type2JLayeredPane.add(type2OutputAutomatonJPanel, new Integer(1));

		type2InputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type2InputAutomatonJPanel.setLayout(null);

		type2InputAutomatonAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonAlphabetJLabel.setText("Alphabet");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetJLabel);
		type2InputAutomatonAlphabetJLabel.setBounds(10, 30, 70, 15);

		type2InputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonStatesJLabel.setText("States");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesJLabel);
		type2InputAutomatonStatesJLabel.setBounds(10, 60, 70, 15);

		type2InputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonTransitionsJLabel.setText("Transitions");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsJLabel);
		type2InputAutomatonTransitionsJLabel.setBounds(10, 120, 70, 15);

		type2InputAutomatonFinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonFinalStatesJLabel.setText("Final states");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesJLabel);
		type2InputAutomatonFinalStatesJLabel.setBounds(10, 90, 70, 20);

		type2InputAutomatonAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonAlphabetMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetMinJLabel);
		type2InputAutomatonAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type2InputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonStatesMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesMinJLabel);
		type2InputAutomatonStatesMinJLabel.setBounds(100, 60, 30, 15);

		type2InputAutomatonFinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonFinalStatesMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesMinJLabel);
		type2InputAutomatonFinalStatesMinJLabel.setBounds(100, 90, 30, 15);

		type2InputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonTransitionsMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsMinJLabel);
		type2InputAutomatonTransitionsMinJLabel.setBounds(100, 120, 30, 15);

		type2InputAutomatonAlphabetMinJTextField.setText("1");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetMinJTextField);
		type2InputAutomatonAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type2InputAutomatonStatesMinJTextField.setText("1");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesMinJTextField);
		type2InputAutomatonStatesMinJTextField.setBounds(130, 60, 60, 20);

		type2InputAutomatonFinalStatesMinJTextField.setText("1");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesMinJTextField);
		type2InputAutomatonFinalStatesMinJTextField.setBounds(130, 90, 60, 20);

		type2InputAutomatonTransitionsMinJTextField.setText("2");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsMinJTextField);
		type2InputAutomatonTransitionsMinJTextField.setBounds(130, 120, 60, 20);

		type2InputAutomatonAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonAlphabetMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetMaxJLabel);
		type2InputAutomatonAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type2InputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonStatesMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesMaxJLabel);
		type2InputAutomatonStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type2InputAutomatonFinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonFinalStatesMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesMaxJLabel);
		type2InputAutomatonFinalStatesMaxJLabel.setBounds(210, 90, 30, 15);

		type2InputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonTransitionsMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsMaxJLabel);
		type2InputAutomatonTransitionsMaxJLabel.setBounds(210, 120, 30, 15);

		type2InputAutomatonAlphabetMaxJTextField.setText("3");
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetMaxJTextField);
		type2InputAutomatonAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type2InputAutomatonStatesMaxJTextField.setText("4");
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesMaxJTextField);
		type2InputAutomatonStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type2InputAutomatonFinalStatesMaxJTextField.setText("2");
		type2InputAutomatonJPanel.add(type2InputAutomatonFinalStatesMaxJTextField);
		type2InputAutomatonFinalStatesMaxJTextField.setBounds(240, 90, 60, 20);

		type2InputAutomatonTransitionsMaxJTextField.setText("6");
		type2InputAutomatonJPanel.add(type2InputAutomatonTransitionsMaxJTextField);
		type2InputAutomatonTransitionsMaxJTextField.setBounds(240, 120, 60, 20);

		type2InputAutomatonAlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonAlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z ...", "X, Y, Z ...", "t0, t1, t2...", "p0, p1, p2..." }));
		type2InputAutomatonJPanel.add(type2InputAutomatonAlphabetJComboBox);
		type2InputAutomatonAlphabetJComboBox.setBounds(340, 30, 130, 21);

		type2InputAutomatonStatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonStatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z ...", "q0, q1, q2...", "s0, s1, s2..." }));
		type2InputAutomatonStatesJComboBox.setSelectedIndex(1);
		type2InputAutomatonJPanel.add(type2InputAutomatonStatesJComboBox);
		type2InputAutomatonStatesJComboBox.setBounds(340, 60, 130, 21);

		type2InputAutomatonUnreachableStates1JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonUnreachableStates1JLabel.setText("Unreachable");
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStates1JLabel);
		type2InputAutomatonUnreachableStates1JLabel.setBounds(10, 150, 80, 15);

		type2InputAutomatonUnreachableStates2JLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonUnreachableStates2JLabel.setText("states");
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStates2JLabel);
		type2InputAutomatonUnreachableStates2JLabel.setBounds(10, 170, 50, 15);

		type2InputAutomatonUnreachableStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonUnreachableStatesMinJLabel.setText("min");
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStatesMinJLabel);
		type2InputAutomatonUnreachableStatesMinJLabel.setBounds(100, 150, 30, 15);

		type2InputAutomatonUnreachableStatesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStatesMinJTextField);
		type2InputAutomatonUnreachableStatesMinJTextField.setBounds(130, 150, 60, 20);

		type2InputAutomatonUnreachableStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2InputAutomatonUnreachableStatesMaxJLabel.setText("max");
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStatesMaxJLabel);
		type2InputAutomatonUnreachableStatesMaxJLabel.setBounds(210, 150, 40, 15);

		type2InputAutomatonUnreachableStatesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2InputAutomatonJPanel.add(type2InputAutomatonUnreachableStatesMaxJTextField);
		type2InputAutomatonUnreachableStatesMaxJTextField.setBounds(240, 150, 60, 20);

		type2InputAutomatonJPanel.setBounds(0, 0, 520, 200);
		type2JLayeredPane.add(type2InputAutomatonJPanel, javax.swing.JLayeredPane.DEFAULT_LAYER);

		type2OutputGrammarJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output regular grammar",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type2OutputGrammarJPanel.setLayout(null);

		type2OutputGrammarVariablesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarVariablesJLabel.setText("Non-terminals");
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesJLabel);
		type2OutputGrammarVariablesJLabel.setBounds(10, 30, 90, 15);

		type2OutputGrammarTerminalsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarTerminalsJLabel.setText("Terminals");
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsJLabel);
		type2OutputGrammarTerminalsJLabel.setBounds(10, 60, 60, 15);

		type2OutputGrammarRulesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarRulesJLabel.setText("Rules");
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesJLabel);
		type2OutputGrammarRulesJLabel.setBounds(10, 90, 60, 15);

		type2OutputGrammarVariablesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarVariablesMinJLabel.setText("min");
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesMinJLabel);
		type2OutputGrammarVariablesMinJLabel.setBounds(100, 30, 30, 15);

		type2OutputGrammarTerminalsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarTerminalsMinJLabel.setText("min");
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsMinJLabel);
		type2OutputGrammarTerminalsMinJLabel.setBounds(100, 60, 30, 15);

		type2OutputGrammarRulesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarRulesMinJLabel.setText("min");
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesMinJLabel);
		type2OutputGrammarRulesMinJLabel.setBounds(100, 90, 30, 15);

		type2OutputGrammarVariablesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarVariablesMaxJLabel.setText("max");
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesMaxJLabel);
		type2OutputGrammarVariablesMaxJLabel.setBounds(210, 30, 30, 15);

		type2OutputGrammarTerminalsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarTerminalsMaxJLabel.setText("max");
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsMaxJLabel);
		type2OutputGrammarTerminalsMaxJLabel.setBounds(210, 60, 30, 15);

		type2OutputGrammarRulesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type2OutputGrammarRulesMaxJLabel.setText("max");
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesMaxJLabel);
		type2OutputGrammarRulesMaxJLabel.setBounds(210, 90, 30, 15);

		type2OutputGrammarVariablesMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesMinJTextField);
		type2OutputGrammarVariablesMinJTextField.setBounds(130, 30, 60, 20);

		type2OutputGrammarTerminalsMinJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsMinJTextField);
		type2OutputGrammarTerminalsMinJTextField.setBounds(130, 60, 60, 20);

		type2OutputGrammarRulesMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(
			153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesMinJTextField);
		type2OutputGrammarRulesMinJTextField.setBounds(130, 90, 60, 20);

		type2OutputGrammarVariablesMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarVariablesMaxJTextField);
		type2OutputGrammarVariablesMaxJTextField.setBounds(240, 30, 60, 20);

		type2OutputGrammarTerminalsMaxJTextField.setBorder(javax.swing.BorderFactory
			.createLineBorder(new java.awt.Color(153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarTerminalsMaxJTextField);
		type2OutputGrammarTerminalsMaxJTextField.setBounds(240, 60, 60, 20);

		type2OutputGrammarRulesMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(
			153, 255, 102)));
		type2OutputGrammarJPanel.add(type2OutputGrammarRulesMaxJTextField);
		type2OutputGrammarRulesMaxJTextField.setBounds(240, 90, 60, 20);

		type2OutputGRammarEpsilonJCheckBox.setFont(new java.awt.Font("Lucida Sans", 0, 12)); // NOI18N
		type2OutputGRammarEpsilonJCheckBox.setText("epsilon rule");
		type2OutputGrammarJPanel.add(type2OutputGRammarEpsilonJCheckBox);
		type2OutputGRammarEpsilonJCheckBox.setBounds(340, 90, 110, 23);

		type2OutputGrammarJPanel.setBounds(0, 200, 520, 130);
		type2JLayeredPane.add(type2OutputGrammarJPanel, new Integer(1));

		type2JPanel.add(type2JLayeredPane);
		type2JLayeredPane.setBounds(0, 40, 530, 330);

		type2JPanel.setBounds(0, 0, 530, 450);
		typeJLayeredPane.add(type2JPanel, new Integer(2));

		type3JPanel.setLayout(null);

		type3OperationJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OperationJLabel.setText("Operation");
		type3JPanel.add(type3OperationJLabel);
		type3OperationJLabel.setBounds(10, 10, 80, 15);

		type3OperationJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OperationJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] {
			"DFA -> regular expression", "regular expression -> NFA with ε-transitions" }));
		type3OperationJComboBox.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				type3OperationJComboBoxActionPerformed(evt);
			}
		});
		type3JPanel.add(type3OperationJComboBox);
		type3OperationJComboBox.setBounds(110, 10, 290, 21);

		type3InputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type3InputAutomatonJPanel.setLayout(null);

		type3InputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonStatesJLabel.setText("States");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesJLabel);
		type3InputAutomatonStatesJLabel.setBounds(10, 60, 60, 15);

		type3InputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonStatesMinJLabel.setText("min");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesMinJLabel);
		type3InputAutomatonStatesMinJLabel.setBounds(100, 60, 30, 15);

		type3InputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonStatesMaxJLabel.setText("max");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesMaxJLabel);
		type3InputAutomatonStatesMaxJLabel.setBounds(210, 60, 30, 15);

		type3InputAutomatonFinalStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonFinalStatesJLabel.setText("Final States");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesJLabel);
		type3InputAutomatonFinalStatesJLabel.setBounds(10, 90, 70, 15);

		type3InputAutomatonFinalStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonFinalStatesMinJLabel.setText("min");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesMinJLabel);
		type3InputAutomatonFinalStatesMinJLabel.setBounds(100, 90, 30, 15);

		type3InputAutomatonFinalStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonFinalStatesMaxJLabel.setText("max");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesMaxJLabel);
		type3InputAutomatonFinalStatesMaxJLabel.setBounds(210, 90, 34, 15);

		type3InputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonTransitionsJLabel.setText("Transitions");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsJLabel);
		type3InputAutomatonTransitionsJLabel.setBounds(10, 120, 80, 15);

		type3InputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonTransitionsMinJLabel.setText("min");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsMinJLabel);
		type3InputAutomatonTransitionsMinJLabel.setBounds(100, 120, 30, 15);

		type3InputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonTransitionsMaxJLabel.setText("max");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsMaxJLabel);
		type3InputAutomatonTransitionsMaxJLabel.setBounds(210, 120, 30, 15);

		type3InputAutomatonAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonAlphabetJLabel.setText("Alphabet");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetJLabel);
		type3InputAutomatonAlphabetJLabel.setBounds(10, 30, 60, 15);

		type3InputAutomatonAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonAlphabetMinJLabel.setText("min");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetMinJLabel);
		type3InputAutomatonAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type3InputAutomatonAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonAlphabetMaxJLabel.setText("max");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetMaxJLabel);
		type3InputAutomatonAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type3InputAutomatonStatesMinJTextField.setText("1");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesMinJTextField);
		type3InputAutomatonStatesMinJTextField.setBounds(130, 60, 60, 20);

		type3InputAutomatonStatesMaxJTextField.setText("3");
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesMaxJTextField);
		type3InputAutomatonStatesMaxJTextField.setBounds(240, 60, 60, 20);

		type3InputAutomatonFinalStatesMinJTextField.setText("1");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesMinJTextField);
		type3InputAutomatonFinalStatesMinJTextField.setBounds(130, 90, 60, 20);

		type3InputAutomatonFinalStatesMaxJTextField.setText("2");
		type3InputAutomatonJPanel.add(type3InputAutomatonFinalStatesMaxJTextField);
		type3InputAutomatonFinalStatesMaxJTextField.setBounds(240, 90, 60, 20);

		type3InputAutomatonTransitionsMinJTextField.setText("3");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsMinJTextField);
		type3InputAutomatonTransitionsMinJTextField.setBounds(130, 120, 60, 20);

		type3InputAutomatonTransitionsMaxJTextField.setText("6");
		type3InputAutomatonJPanel.add(type3InputAutomatonTransitionsMaxJTextField);
		type3InputAutomatonTransitionsMaxJTextField.setBounds(240, 120, 60, 20);

		type3InputAutomatonAlphabetMinJTextField.setText("2");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetMinJTextField);
		type3InputAutomatonAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type3InputAutomatonAlphabetMaxJTextField.setText("2");
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetMaxJTextField);
		type3InputAutomatonAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type3InputAutomatonAlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonAlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "t0, t1, t2...", "p0, p1, p2...",
			"I, II, III, IV...", "i, ii, iii, iv...", "1, 10, 11, 100..." }));
		type3InputAutomatonJPanel.add(type3InputAutomatonAlphabetJComboBox);
		type3InputAutomatonAlphabetJComboBox.setBounds(340, 30, 130, 21);

		type3InputAutomatonStatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputAutomatonStatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0, s1, s2...",
			"I, II, III, IV...", "i, ii, iii, iv...", "1, 10, 11, 100..." }));
		type3InputAutomatonStatesJComboBox.setSelectedIndex(6);
		type3InputAutomatonJPanel.add(type3InputAutomatonStatesJComboBox);
		type3InputAutomatonStatesJComboBox.setBounds(340, 60, 130, 21);

		type3InputAutomatonJPanel.setBounds(0, 0, 520, 150);
		type3jLayeredPane.add(type3InputAutomatonJPanel, javax.swing.JLayeredPane.DEFAULT_LAYER);

		type3InputREJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Input regular expression",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type3InputREJPanel.setLayout(null);

		type3InputREAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputREAlphabetJLabel.setText("Alphabet");
		type3InputREJPanel.add(type3InputREAlphabetJLabel);
		type3InputREAlphabetJLabel.setBounds(10, 30, 60, 15);

		type3InputREAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputREAlphabetMinJLabel.setText("min");
		type3InputREJPanel.add(type3InputREAlphabetMinJLabel);
		type3InputREAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type3InputREAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputREAlphabetMaxJLabel.setText("max");
		type3InputREJPanel.add(type3InputREAlphabetMaxJLabel);
		type3InputREAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type3InputREAlphabetMinJTextField.setText("2");
		type3InputREJPanel.add(type3InputREAlphabetMinJTextField);
		type3InputREAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type3InputREAlphabetMaxJTextField.setText("4");
		type3InputREJPanel.add(type3InputREAlphabetMaxJTextField);
		type3InputREAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type3InputReAlphabetJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputReAlphabetJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, x...", "X, Y, Z...", "t0, t1, t2...", "p0, p1, p2..." }));
		type3InputREJPanel.add(type3InputReAlphabetJComboBox);
		type3InputReAlphabetJComboBox.setBounds(340, 30, 130, 21);

		type3InputRELengthJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputRELengthJLabel.setText("Length");
		type3InputREJPanel.add(type3InputRELengthJLabel);
		type3InputRELengthJLabel.setBounds(10, 60, 70, 15);

		type3InputRELengthMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputRELengthMinJLabel.setText("min");
		type3InputREJPanel.add(type3InputRELengthMinJLabel);
		type3InputRELengthMinJLabel.setBounds(100, 60, 30, 15);

		type3InputRELengthMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3InputRELengthMaxJLabel.setText("max");
		type3InputREJPanel.add(type3InputRELengthMaxJLabel);
		type3InputRELengthMaxJLabel.setBounds(210, 60, 30, 15);

		type3InputRELengthMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3InputREJPanel.add(type3InputRELengthMinJTextField);
		type3InputRELengthMinJTextField.setBounds(130, 60, 60, 20);

		type3InputRELengthMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3InputREJPanel.add(type3InputRELengthMaxJTextField);
		type3InputRELengthMaxJTextField.setBounds(240, 60, 60, 20);

		type3InputREJPanel.setBounds(0, 0, 520, 100);
		type3jLayeredPane.add(type3InputREJPanel, new Integer(1));

		type3OutputAutomatonJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output automaton",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type3OutputAutomatonJPanel.setLayout(null);

		type3OutputAutomatonStatesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonStatesJLabel.setText("States");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesJLabel);
		type3OutputAutomatonStatesJLabel.setBounds(10, 30, 60, 15);

		type3OutputAutomatonStatesMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonStatesMinJLabel.setText("min");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesMinJLabel);
		type3OutputAutomatonStatesMinJLabel.setBounds(100, 30, 30, 15);

		type3OutputAutomatonStatesMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonStatesMaxJLabel.setText("max");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesMaxJLabel);
		type3OutputAutomatonStatesMaxJLabel.setBounds(210, 30, 30, 15);

		type3OutputAutomatonTransitionsJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonTransitionsJLabel.setText("Transitions");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsJLabel);
		type3OutputAutomatonTransitionsJLabel.setBounds(10, 60, 80, 15);

		type3OutputAutomatonTransitionsMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonTransitionsMinJLabel.setText("min");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsMinJLabel);
		type3OutputAutomatonTransitionsMinJLabel.setBounds(100, 60, 30, 15);

		type3OutputAutomatonTransitionsMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonTransitionsMaxJLabel.setText("max");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsMaxJLabel);
		type3OutputAutomatonTransitionsMaxJLabel.setBounds(210, 60, 30, 15);

		type3OutputAutomatonStatesMinJTextField.setText("2");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesMinJTextField);
		type3OutputAutomatonStatesMinJTextField.setBounds(130, 30, 60, 20);

		type3OutputAutomatonTransitionsMinJTextField.setText("2");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsMinJTextField);
		type3OutputAutomatonTransitionsMinJTextField.setBounds(130, 60, 60, 20);

		type3OutputAutomatonStatesMaxJTextField.setText("6");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesMaxJTextField);
		type3OutputAutomatonStatesMaxJTextField.setBounds(240, 30, 60, 20);

		type3OutputAutomatonTransitionsMaxJTextField.setText("10");
		type3OutputAutomatonJPanel.add(type3OutputAutomatonTransitionsMaxJTextField);
		type3OutputAutomatonTransitionsMaxJTextField.setBounds(240, 60, 60, 20);

		type3OutputAutomatonStatesJComboBox.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputAutomatonStatesJComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "a, b, c...",
			"A, B, C...", "1, 2, 3...", "x, y, z...", "X, Y, Z...", "q0, q1, q2...", "s0, s1, s2....",
			"I, II, III, IV...", "i, ii, iii, iv...", "1, 10, 11, 100..." }));
		type3OutputAutomatonStatesJComboBox.setSelectedIndex(6);
		type3OutputAutomatonJPanel.add(type3OutputAutomatonStatesJComboBox);
		type3OutputAutomatonStatesJComboBox.setBounds(340, 30, 130, 21);

		type3OutputAutomatonJPanel.setBounds(0, 100, 520, 140);
		type3jLayeredPane.add(type3OutputAutomatonJPanel, new Integer(1));

		type3OutputREJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Output regular expression",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		type3OutputREJPanel.setLayout(null);

		type3OutputREAlphabetJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputREAlphabetJLabel.setText("Alphabet");
		type3OutputREJPanel.add(type3OutputREAlphabetJLabel);
		type3OutputREAlphabetJLabel.setBounds(10, 30, 80, 15);

		type3OutputREAlphabetMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputREAlphabetMinJLabel.setText("min");
		type3OutputREJPanel.add(type3OutputREAlphabetMinJLabel);
		type3OutputREAlphabetMinJLabel.setBounds(100, 30, 30, 15);

		type3OutputREAlphabetMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3OutputREJPanel.add(type3OutputREAlphabetMinJTextField);
		type3OutputREAlphabetMinJTextField.setBounds(130, 30, 60, 20);

		type3OutputREAlphabetMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputREAlphabetMaxJLabel.setText("max");
		type3OutputREJPanel.add(type3OutputREAlphabetMaxJLabel);
		type3OutputREAlphabetMaxJLabel.setBounds(210, 30, 30, 15);

		type3OutputREAlphabetMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3OutputREJPanel.add(type3OutputREAlphabetMaxJTextField);
		type3OutputREAlphabetMaxJTextField.setBounds(240, 30, 60, 20);

		type3OutputRELengthJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputRELengthJLabel.setText("Length");
		type3OutputREJPanel.add(type3OutputRELengthJLabel);
		type3OutputRELengthJLabel.setBounds(10, 60, 60, 15);

		type3OutputRELengthMinJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputRELengthMinJLabel.setText("min");
		type3OutputREJPanel.add(type3OutputRELengthMinJLabel);
		type3OutputRELengthMinJLabel.setBounds(100, 60, 30, 15);

		type3OutputRELengthMaxJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		type3OutputRELengthMaxJLabel.setText("max");
		type3OutputREJPanel.add(type3OutputRELengthMaxJLabel);
		type3OutputRELengthMaxJLabel.setBounds(210, 60, 30, 15);

		type3OutputRELengthMinJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3OutputREJPanel.add(type3OutputRELengthMinJTextField);
		type3OutputRELengthMinJTextField.setBounds(130, 60, 60, 20);

		type3OutputRELengthMaxJTextField.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(153,
			255, 102)));
		type3OutputREJPanel.add(type3OutputRELengthMaxJTextField);
		type3OutputRELengthMaxJTextField.setBounds(240, 60, 60, 20);

		type3OutputREJPanel.setBounds(0, 150, 520, 90);
		type3jLayeredPane.add(type3OutputREJPanel, javax.swing.JLayeredPane.DEFAULT_LAYER);

		type3JPanel.add(type3jLayeredPane);
		type3jLayeredPane.setBounds(0, 50, 520, 250);

		type3JPanel.setBounds(0, 0, 530, 450);
		typeJLayeredPane.add(type3JPanel, new Integer(3));

		getContentPane().add(typeJLayeredPane);
		typeJLayeredPane.setBounds(30, 40, 530, 460);

		generatingJPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Generating",
			javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION,
			new java.awt.Font("Lucida Sans", 0, 12)));
		generatingJPanel.setLayout(null);

		exercisesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		exercisesJLabel.setText("Number of exercises");
		generatingJPanel.add(exercisesJLabel);
		exercisesJLabel.setBounds(10, 20, 120, 20);

		exercisesJTextField.setText("1");
		exercisesJTextField.setName("Result: number of examples");
		generatingJPanel.add(exercisesJTextField);
		exercisesJTextField.setBounds(150, 20, 60, 20);

		generateJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		generateJButton.setText("GENERATE");
		generateJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				generateJButtonActionPerformed(evt);
			}
		});
		generatingJPanel.add(generateJButton);
		generateJButton.setBounds(400, 20, 100, 23);

		stopJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		stopJButton.setText("STOP");
		stopJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				stopJButtonActionPerformed(evt);
			}
		});
		generatingJPanel.add(stopJButton);
		stopJButton.setBounds(400, 60, 100, 23);

		progressJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		progressJLabel.setText("Generating...");
		generatingJPanel.add(progressJLabel);
		progressJLabel.setBounds(10, 60, 130, 15);

		completedExercisesJLabel.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		completedExercisesJLabel.setText("0 of 1");
		generatingJPanel.add(completedExercisesJLabel);
		completedExercisesJLabel.setBounds(150, 60, 90, 15);
		generatingJPanel.add(jProgressBar);
		jProgressBar.setBounds(150, 80, 146, 19);

		getContentPane().add(generatingJPanel);
		generatingJPanel.setBounds(30, 500, 520, 110);

		outputJTabbedPane.setFont(new java.awt.Font("Lucida Sans", 0, 12));

		plainTextJTextArea.setColumns(20);
		plainTextJTextArea.setFont(new java.awt.Font("DialogInput", 0, 12));
		plainTextJTextArea.setRows(5);
		plainTextJScrollPane.setViewportView(plainTextJTextArea);

		outputJTabbedPane.addTab("Plain text", plainTextJScrollPane);

		latexJTextArea.setColumns(20);
		latexJTextArea.setRows(5);
		latexJScrollPane.setViewportView(latexJTextArea);

		outputJTabbedPane.addTab("LaTeX", latexJScrollPane);

		isJTextArea.setColumns(20);
		isJTextArea.setRows(5);
		isJScrollPane.setViewportView(isJTextArea);

		outputJTabbedPane.addTab("IS", isJScrollPane);

		plainTextENJTextArea.setColumns(20);
		plainTextENJTextArea.setFont(new java.awt.Font("DialogInput", 0, 12));
		plainTextENJTextArea.setRows(5);
		plainTextENJScrollPane.setViewportView(plainTextENJTextArea);

		outputJTabbedPane.addTab("Plain text (EN)", plainTextENJScrollPane);

		latexENJTextArea.setColumns(20);
		latexENJTextArea.setRows(5);
		latexENJScrollPane.setViewportView(latexENJTextArea);

		outputJTabbedPane.addTab("LaTeX (EN)", latexENJScrollPane);

		isENJTextArea.setColumns(20);
		isENJTextArea.setRows(5);
		isENJScrollPane.setViewportView(isENJTextArea);

		outputJTabbedPane.addTab("IS (EN)", isENJScrollPane);

		getContentPane().add(outputJTabbedPane);
		outputJTabbedPane.setBounds(580, 10, 444, 550);

		copyAllJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		copyAllJButton.setText("copy all");
		copyAllJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				copyAllJButtonActionPerformed(evt);
			}
		});
		getContentPane().add(copyAllJButton);
		copyAllJButton.setBounds(660, 580, 80, 23);

		saveJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		saveJButton.setText("save as");
		saveJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				saveJButtonActionPerformed(evt);
			}
		});
		getContentPane().add(saveJButton);
		saveJButton.setBounds(750, 580, 80, 23);

		saveAllJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		saveAllJButton.setText("save all as");
		saveAllJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				saveAllJButtonActionPerformed(evt);
			}
		});
		getContentPane().add(saveAllJButton);
		saveAllJButton.setBounds(840, 580, 100, 23);

		copyJButton.setFont(new java.awt.Font("Lucida Sans", 0, 12));
		copyJButton.setText("copy");
		copyJButton.addActionListener(new java.awt.event.ActionListener()
		{
			public void actionPerformed(java.awt.event.ActionEvent evt)
			{
				copyJButtonActionPerformed(evt);
			}
		});
		getContentPane().add(copyJButton);
		copyJButton.setBounds(580, 580, 70, 23);

		pack();
	}// </editor-fold>//GEN-END:initComponents

	/**
	 * type of exercises is choosen
	 * 
	 * @param evt
	 *            the type of exercises is choosen in the combobox
	 */
	private void typeJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_typeJComboBoxActionPerformed
		if (evt.getSource() != null)
		{ // switch panel
			selectedPanel = panels.get(this.typeJComboBox.getSelectedIndex());
			for (JPanel panel : panels)
			{
				panel.setVisible(false);
			}
			selectedPanel.setVisible(true);
			switch (this.typeJComboBox.getSelectedIndex())
			{
				case 1:
					this.setType1Panel();
					break;
				case 2:
					this.setType2Panel();
					break;
				case 3:
					this.setType3Panel();
					break;
			}
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
		}
	}// GEN-LAST:event_typeJComboBoxActionPerformed

	/**
	 * operation from in panel 1 is choosen
	 * 
	 * @param evt
	 *            the operation is selected in combobox with the sign "from"
	 */
	private void type1OperationFromJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type1OperationFromJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
			// index of selected item
			int i = this.type1OperationFromJComboBox.getSelectedIndex();
			// change operation To combobox
			this.type1OperationToJComboBox.removeAllItems();
			for (int j = i; j < this.type1OperationFromJComboBox.getItemCount() - 1; j++)
			{
				this.type1OperationToJComboBox.addItem(this.type1OperationFromJComboBox.getItemAt(j + 1));
			}
			this.type1OperationToJComboBox.addItem("canonical DFA");
			// disable/enable minimization
			// disable/ enable total transition function
			boolean enabled = (i == 2 ? true : false);
			this.setType1MinimizationEnabled(enabled);
			this.setType1TotalTransitionFunctionEnabled(enabled);
			// disable / enable unreachable states
			enabled = (i == 3 ? false : true);
			this.setType1UnreachableStatesEnabled(enabled);
			this.setType1FirstStateNotInitialEnabled(enabled);
			// enable / disable resulting automaton states
			switch (i)
			{
				case 0:
					this.setType1ResultingAutomatonStatesEnabled(false);
					this.setType1ResultingAutomatonTransitionsEnabled(true);
					break;
				case 3:
					this.setType1ResultingAutomatonEnabled(false);
					break;
				default:
					this.setType1ResultingAutomatonEnabled(true);
					break;
			}

		}
	}// GEN-LAST:event_type1OperationFromJComboBoxActionPerformed

	/**
	 * operation to in panel 1 is choosen
	 * 
	 * @param evt
	 *            the operation is selected in the combobox with the sign "to"
	 */
	private void type1OperationToJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type1OperationToJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			// index of selected item
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
			int i = this.type1OperationFromJComboBox.getItemCount() - this.type1OperationToJComboBox.getItemCount()
				+ this.type1OperationToJComboBox.getSelectedIndex();
			// enable / disable advanced minimization options
			boolean enabled = (i > 1 ? true : false);
			this.setType1MinimizationEnabled(enabled);
			int j = this.type1OperationFromJComboBox.getSelectedIndex();
			// enable / disable resulting automaton options
			switch (i)
			{
				case 0:
					this.setType1ResultingAutomatonStatesEnabled(false);
					this.setType1ResultingAutomatonTransitionsEnabled(true);
					break;
				default:
					this.setType1ResultingAutomatonEnabled(true);
					break;
			}
			enabled = (j == 2 ? true : false);
			// enable / disable total transition function
			this.setType1TotalTransitionFunctionEnabled(enabled);
			// enable / disable unreachable states options
			enabled = (j == 3 ? false : true);
			this.setType1UnreachableStatesEnabled(enabled);
		}
	}// GEN-LAST:event_type1OperationToJComboBoxActionPerformed

	/**
	 * copy all text from the output area to the clipboard
	 * 
	 * @param evt
	 *            the button with the sign "copy" is selected
	 */
	private void copyAllJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_copyAllJButtonActionPerformed
		if (evt.getSource() != null)
		{
			javax.swing.JTextArea j = this.getSelectedArea();
			j.selectAll();
			j.copy();
		}
	}// GEN-LAST:event_copyAllJButtonActionPerformed

	/**
	 * save the selected text from the output area to the file
	 * 
	 * @param evt
	 *            button with the sign "save as" is selected
	 */
	private void saveJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_saveJButtonActionPerformed
		if (evt != null)
		{
			javax.swing.JTextArea j = this.getSelectedArea();
			if (j.getSelectedText() == null)
			{
				javax.swing.JOptionPane.showMessageDialog(this, "Some text must be selected.", "Warning",
					JOptionPane.WARNING_MESSAGE);
			}
			else
			{
				File file = this.createFile();
				this.saveToFile(j.getSelectedText(), file);
			}
		}
	}// GEN-LAST:event_saveJButtonActionPerformed

	/**
	 * Exersises are written to the output panel
	 * 
	 * @param evt
	 *            the button with the sign "generate" is selected
	 */
	private void generateJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_generateJButtonActionPerformed
		if (evt.getSource() != null)
		{
			try
			{
				java.awt.Cursor c = java.awt.Cursor.getPredefinedCursor(3);
				this.setCursor(c);
			}
			catch (IllegalArgumentException e)
			{
			}
			this.generateJButton.setEnabled(false);
			this.stopJButton.setEnabled(true);
			this.setButtonsEnabled(false);
			this.setGeneratingEnabled(true);
			this.setSelectedPanelEnabled(false);
			this.progressJLabel.setText("Generating...");
			Map<String, JTextArea> output = new HashMap<String, JTextArea>();
			output.put("latex", latexJTextArea);
			output.put("plainText", plainTextJTextArea);
			output.put("IS", isJTextArea);
			output.put("latexEN", latexENJTextArea);
			output.put("plainTextEN", plainTextENJTextArea);
			output.put("ISEN", isENJTextArea);
			this.removeJTextAreas();
			if (selectedPanel.equals(this.type0JPanel))
			{
				this.getExerciseT0(output);
			}
			if (selectedPanel.equals(this.type1JPanel))
			{
				this.getExerciseT1(output);
			}
			if (selectedPanel.equals(this.type2JPanel))
			{
				this.getExerciseT2(output);
			}
			if (selectedPanel.equals(this.type3JPanel))
			{
				this.getExerciseT3(output);
			}
		}
	}// GEN-LAST:event_generateJButtonActionPerformed

	/**
	 * cleans the text in all tabs
	 */
	private void removeJTextAreas()
	{
		this.latexENJTextArea.setText(null);
		this.latexJTextArea.setText(null);
		this.plainTextENJTextArea.setText(null);
		this.plainTextJTextArea.setText(null);
		this.isENJTextArea.setText(null);
		this.isJTextArea.setText(null);
	}

	/**
	 * save all text from the output area to the file
	 * 
	 * @param evt
	 *            the button with the sign "save all as" is selected
	 */
	private void saveAllJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_saveAllJButtonActionPerformed
		if (evt != null)
		{
			javax.swing.JTextArea j = this.getSelectedArea();
			if (j.getText() == null)
			{
				javax.swing.JOptionPane.showMessageDialog(this, "Any text was not found.", "Warning",
					JOptionPane.WARNING_MESSAGE);
			}
			else
			{
				File file = this.createFile();
				this.saveToFile(j.getText(), file);
			}
		}
	}// GEN-LAST:event_saveAllJButtonActionPerformed

	/**
	 * copy selected text from the output area to the clipboard
	 * 
	 * @param evt
	 *            the button with the sign "copy" is selected
	 */
	private void copyJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_copyJButtonActionPerformed
		if (evt.getSource() != null)
		{
			javax.swing.JTextArea j = this.getSelectedArea();
			if (j.getSelectedText() == null)
			{
				javax.swing.JOptionPane.showMessageDialog(this, "Some text must be selected.", "Warning",
					JOptionPane.WARNING_MESSAGE);
			}
			else
			{
				j.copy();
			}
		}
	}// GEN-LAST:event_copyJButtonActionPerformed

	/**
	 * enables resizing the form
	 * 
	 * @param evt
	 *            the form was resized
	 */
	private void formComponentResized(java.awt.event.ComponentEvent evt)
	{// GEN-FIRST:event_formComponentResized
		if (evt.getSource() != null)
		{
			if ((this.getHeight() >= this.getMinimumSize().height + 20)
				|| (this.getWidth() < MAX_WIDTH && this.getWidth() >= MIN_WIDTH))
			{
				this.outputJTabbedPane.setSize(this.getWidth() - this.selectedPanel.getWidth() - 75, this.getHeight()
					- 75 - this.copyJButton.getHeight());
				this.copyAllJButton.setLocation(this.copyAllJButton.getX(),
					this.getHeight() - 50 - this.copyAllJButton.getHeight());
				this.saveJButton.setLocation(this.saveJButton.getX(),
					(this.getHeight() - 50 - this.saveJButton.getHeight()));
				this.saveAllJButton.setLocation(this.saveAllJButton.getX(),
					getHeight() - 50 - this.saveAllJButton.getHeight());
				this.copyJButton.setLocation(this.copyJButton.getX(), getHeight() - 50 - this.copyJButton.getHeight());
			}
			else
			{
				this.resizeFrame();
			}
		}

	}// GEN-LAST:event_formComponentResized

	/**
	 * the button with the sign "stop" was pressed
	 * 
	 * @param evt
	 *            the button with the sign "stop" was pressed
	 */
	private void stopJButtonActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_stopJButtonActionPerformed
		if (evt.getSource() != null)
		{
			if (t0 != null)
			{
				t0.cancel(true);
				t0 = null;
			}
			if (t1 != null)
			{
				t1.cancel(true);
				t1 = null;
			}
			if (t2 != null)
			{
				t2.cancel(true);
				t2 = null;
			}
			if (t3 != null)
			{
				t3.cancel(true);
				t3 = null;
			}

			this.generateJButton.setEnabled(true);
			this.stopJButton.setEnabled(false);
			this.setButtonsEnabled(true);
			this.setCursor(java.awt.Cursor.getDefaultCursor());
			this.progressJLabel.setText("Generating stopped");
			this.setSelectedPanelEnabled(true);
		}
	}// GEN-LAST:event_stopJButtonActionPerformed

	/**
	 * the item in combo box operation of type 2 was selected
	 * 
	 * @param evt
	 *            the item in combo box operation of type 2 was selected
	 */
	private void type2OperationJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type2OperationJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
			this.setType2Panel();
		}
	}// GEN-LAST:event_type2OperationJComboBoxActionPerformed

	/**
	 * the item in combo box operation of type 3 was selected
	 * 
	 * @param evt
	 *            the item in combo box operation of type 3 was selected
	 */
	private void type3OperationJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type3OperationJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
			this.setType3Panel();
		}
	}// GEN-LAST:event_type3OperationJComboBoxActionPerformed

	private void type0OperationJComboBoxActionPerformed(java.awt.event.ActionEvent evt)
	{// GEN-FIRST:event_type0OperationJComboBoxActionPerformed
		if (evt.getSource() != null)
		{
			this.setGeneratingEnabled(false);
			this.removeJTextAreas();
		}
	}// GEN-LAST:event_type0OperationJComboBoxActionPerformed

	/**
	 * the calculation of the thread, which generated the exercises, is ready. The button with the sign GENERATE is
	 * enabled, the button with the sign STOP is not enabled
	 */
	public void resetStopGenerateButtons()
	{
		t0 = null;
		t1 = null;
		t2 = null;
		t3 = null;
		this.stopJButton.setEnabled(false);
		this.generateJButton.setEnabled(true);
		this.setButtonsEnabled(true);
		this.setCursor(java.awt.Cursor.getDefaultCursor());
		this.setGeneratingEnabled(false);
		this.setSelectedPanelEnabled(true);
	}

	/**
	 * sets the progress bar with the given maximum
	 * 
	 * @param max
	 *            value of progressbar
	 */
	private void setProggressBar(int max)
	{
		if (max <= 0)
		{
			throw new IllegalArgumentException("ExerciseBuilder.setProgressBar()");
		}
		this.jProgressBar.setMaximum(max);
		this.jProgressBar.setStringPainted(true);
	}

	/**
	 * sets the progress information in the panel Generating (text about ready exercises, progress bar...)
	 * 
	 * @param ready
	 *            number of ready exercises
	 */
	public void setProgress(int ready)
	{
		int from = this.jProgressBar.getMaximum();
		this.jProgressBar.setString((ready * 100) / from + " %");
		this.jProgressBar.setValue(ready);
		this.completedExercisesJLabel.setText(ready + " of " + from);
		if (ready == from)
		{
			this.progressJLabel.setText("Generating completed");
			this.resetStopGenerateButtons();
			this.setGeneratingEnabled(true);
		}
	}

	/**
	 * resises the frame, when the selected panel is changed
	 */
	private void resizeFrame()
	{
		selectedPanel.setLocation(0, 0);
		typeJLayeredPane.setSize(selectedPanel.getWidth(), selectedPanel.getHeight());
		generatingJPanel.setLocation(generatingJPanel.getX(), typeJLayeredPane.getY() + typeJLayeredPane.getHeight()); // +15
		if ((this.outputJTabbedPane.getWidth() + this.selectedPanel.getWidth()) + 75 <= MAX_WIDTH)
		{
			this.outputJTabbedPane.setSize(MAX_WIDTH - this.selectedPanel.getWidth() - 75, this.generatingJPanel.getY()
				+ (this.generatingJPanel.getHeight() / 2));
		}
		else
		{
			this.outputJTabbedPane.setSize(MIN_WIDTH - this.selectedPanel.getWidth() - 75, this.generatingJPanel.getY()
				+ (this.generatingJPanel.getHeight() / 2));
		}
		this.copyAllJButton.setLocation(this.copyAllJButton.getX(), (this.generatingJPanel.getY()
			+ (this.generatingJPanel.getHeight()) - this.copyAllJButton.getHeight()));
		this.saveJButton.setLocation(this.saveJButton.getX(),
			(this.generatingJPanel.getY() + (this.generatingJPanel.getHeight()) - this.saveJButton.getHeight()));
		this.saveAllJButton.setLocation(this.saveAllJButton.getX(), (this.generatingJPanel.getY()
			+ (this.generatingJPanel.getHeight()) - this.saveAllJButton.getHeight()));
		this.copyJButton.setLocation(this.copyJButton.getX(),
			(this.generatingJPanel.getY() + (this.generatingJPanel.getHeight()) - this.copyJButton.getHeight()));
		// vyska listy !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		int frameWidth;
		if ((this.outputJTabbedPane.getWidth() + this.selectedPanel.getWidth() + 75) > MIN_WIDTH)
		{
			frameWidth = MAX_WIDTH;
		}
		else
		{
			frameWidth = MIN_WIDTH;
		}
		this.setSize(frameWidth, generatingJPanel.getY() + generatingJPanel.getHeight() + 60);

	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1MinimizationEnabled(boolean enabled)
	{
		// if number of steps min, max were filled before(and false is given),
		// the numbers are removed
		if (enabled == false)
		{
			this.type1MinimizationStepsMinJTextField.setText(null);
			this.type1MinimizationStepsMaxJTextField.setText(null);
		}
		for (java.awt.Component c : this.type1MinimizationJPanel.getComponents())
		{
			c.setEnabled(enabled);
		}
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are enabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1UnreachableStatesEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1InputAutomatonUnreachableStatesMinJTextField.setText(null);
			this.type1InputAutomatonUnreachableStatesMaxJTextField.setText(null);
		}
		this.type1InputAutomatonUnreachableStates1JLabel.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStates2jLabel.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStatesMinJLabel.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStatesMaxJLabel.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStatesMinJTextField.setEnabled(enabled);
		this.type1InputAutomatonUnreachableStatesMaxJTextField.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1TotalTransitionFunctionEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1InputAutomatonTotalTransitionFunctionJCheckBox.setSelected(enabled);
		}
		this.type1InputAutomatonTotalTransitionFunctionJCheckBox.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1FirstStateNotInitialEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1InputAutomatonFirstStateJCheckBox.setSelected(enabled);
		}
		this.type1InputAutomatonFirstStateJCheckBox.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1ResultingAutomatonEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1OutputAutomatonStatesMinJTextField.setText(null);
			this.type1OutputAutomatonStatesMaxJTextField.setText(null);
			this.type1OutputAutomatonTransitionsMinJTextField.setText(null);
			this.type1OutputAutomatonTransitionsMaxJTextField.setText(null);
		}
		for (java.awt.Component c : this.type1OutputAutomatonJPanel.getComponents())
		{
			c.setEnabled(enabled);
		}
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1ResultingAutomatonStatesEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1OutputAutomatonStatesMinJTextField.setText(null);
			this.type1OutputAutomatonStatesMaxJTextField.setText(null);
		}
		this.type1OutputAutomatonStatesJLabel.setEnabled(enabled);
		this.type1OutputAutomatonStatesMinJLabel.setEnabled(enabled);
		this.type1OutputAutomatonStatesMaxJLabel.setEnabled(enabled);
		this.type1OutputAutomatonStatesMinJTextField.setEnabled(enabled);
		this.type1OutputAutomatonStatesMaxJTextField.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are enabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setType1ResultingAutomatonTransitionsEnabled(boolean enabled)
	{
		if (enabled == false)
		{
			this.type1OutputAutomatonTransitionsMinJTextField.setText(null);
			this.type1OutputAutomatonTransitionsMaxJTextField.setText(null);
		}
		this.type1OutputAutomatonTransitionsJLabel.setEnabled(enabled);
		this.type1OutputAutomatonTransitionsMinJLabel.setEnabled(enabled);
		this.type1OutputAutomatonTransitionsMaxJLabel.setEnabled(enabled);
		this.type1OutputAutomatonTransitionsMinJTextField.setEnabled(enabled);
		this.type1OutputAutomatonTransitionsMaxJTextField.setEnabled(enabled);
	}

	/**
	 * Enables or disables this component, depending on the value of the parameter b. An enabled component can respond
	 * to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled
	 */
	private void setButtonsEnabled(boolean enabled)
	{
		this.copyAllJButton.setEnabled(enabled);
		this.saveAllJButton.setEnabled(enabled);
		this.copyJButton.setEnabled(enabled);
		this.saveJButton.setEnabled(enabled);
	}

	/**
	 * sets the generating details enabled
	 * 
	 * @param enabled
	 *            If true, details are enabled; otherwise details are disabled
	 */
	private void setGeneratingEnabled(boolean enabled)
	{
		this.jProgressBar.setVisible(enabled);
		this.progressJLabel.setVisible(enabled);
		this.completedExercisesJLabel.setVisible(enabled);
	}

	/**
	 * sets the panel for exercises of type 1
	 */
	private void setType1Panel()
	{
		// advance minimization options is disabled
		this.setType1MinimizationEnabled(false);
		// states of resulting automaton is disabled
		this.setType1ResultingAutomatonStatesEnabled(false);
		// total transition function is disabled
		this.setType1TotalTransitionFunctionEnabled(false);
	}

	/**
	 * sets the panel for exercises of type 2
	 */
	private void setType2Panel()
	{
		int i = type2OperationJComboBox.getSelectedIndex();
		if (i == 0)
		{
			this.type2InputAutomatonJPanel.setVisible(true);
			this.type2InputGrammarJPanel.setVisible(false);
			this.type2OutputAutomatonJPanel.setVisible(false);
			this.type2OutputGrammarJPanel.setVisible(true);
		}
		if (i == 1)
		{
			this.type2InputAutomatonJPanel.setVisible(false);
			this.type2InputGrammarJPanel.setVisible(true);
			this.type2OutputAutomatonJPanel.setVisible(true);
			this.type2OutputGrammarJPanel.setVisible(false);
		}
	}

	/**
	 * sets the panel for exercises of type 2
	 */
	private void setType3Panel()
	{
		int i = type3OperationJComboBox.getSelectedIndex();
		if (i == 0)
		{
			this.type3InputAutomatonJPanel.setVisible(true);
			this.type3OutputREJPanel.setVisible(true);
			this.type3InputREJPanel.setVisible(false);
			this.type3OutputAutomatonJPanel.setVisible(false);
		}
		if (i == 1)
		{
			this.type3InputAutomatonJPanel.setVisible(false);
			this.type3OutputREJPanel.setVisible(false);
			this.type3InputREJPanel.setVisible(true);
			this.type3OutputAutomatonJPanel.setVisible(true);
		}
	}

	/**
	 * saves the string to the given file
	 * 
	 * @param s
	 *            string to save
	 * @param f
	 *            file
	 */
	private void saveToFile(String s, File file)
	{
		if (file == null)
		{
			return;
		}
		if (s.isEmpty())
		{
			return;
		}
		OutputStreamWriter fos = null;
		try
		{
			FileOutputStream fw = new FileOutputStream(file);
			fos = new OutputStreamWriter(fw, "UTF-8");
			fos.write(s);
		}
		catch (IOException e)
		{
			this.showErrorDialog("file " + file.getName() + ": " + e.getMessage());
			return;
		}
		finally
		{
			try
			{
				fos.close();
			}
			catch (IOException e)
			{
				this.showErrorDialog("The closing of the file outputstream failed");
				return;
			}
		}
	}

	/**
	 * returns new file or null, if error occures
	 * 
	 * @return new file or null, if error occures
	 */
	private File createFile()
	{
		File file = null;
		JFileChooser chooser = new JFileChooser();
		FileNameExtensionFilter filter = new FileNameExtensionFilter("tex & txt & qdef", "tex", "txt", "qdef");
		chooser.setFileFilter(filter);
		int returnVal = chooser.showSaveDialog(this);
		if (returnVal == JFileChooser.APPROVE_OPTION)
		{
			file = new File(chooser.getSelectedFile().getAbsolutePath());
			int n = 0;
			if (file.exists())
			{
				n = JOptionPane.showConfirmDialog(this, "File " + file.getName()
					+ " already exists.\nDo you want to overwrite it?", "Warning", JOptionPane.YES_NO_OPTION);
			}
			if (n != 0)
			{
				return null;
			}
			try
			{
				file.createNewFile();
			}
			catch (IOException ex)
			{
				this.showErrorDialog("The file " + file.getName() + " was not created. An I/O error occurred:\n "
					+ ex.getMessage());
				return null;
			}
		}
		return file;
	}

	/**
	 * parses the input and make the working thread, which computes the result and prints it into given output
	 * 
	 * @param output
	 *            map; keyset are strings: plainText, plainTextEN, IS, ISEN, latex, latexEN; values the JTextAreas,
	 *            where the result is printed
	 */
	private void getExerciseT0(Map<String, JTextArea> output)
	{
		int numberOfExercises = 0;
		try
		{
			numberOfExercises = Integer.parseInt(this.exercisesJTextField.getText());
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises <= 0)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises > 500)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number <= 500.");
			return;
		}
		this.setProggressBar(numberOfExercises);
		this.setProgress(0);

		int operation = this.type0OperationJComboBox.getSelectedIndex();
		int alphabet = this.type0AlphabetJComboBox.getSelectedIndex();
		int sizeOfAlphabetMin = 0;
		int sizeOfAlphabetMax = 0;
		// attributes of the first automaton
		int a1NumberOfStatesMin = 0;
		int a1NumberOfStatesMax = 0;
		int a1NumberOfFinalStatesMin = 0;
		int a1NumberOfFinalStatesMax = 0;
		int a1NumberOfTransitionsMin = 0;
		int a1NumberOfTransitionsMax = 0;
		boolean a1TotalTransitionFunction = this.type0Automaton1TotalTransitionFunctionJCheckBox.isSelected();
		boolean a1Complement = this.type0Automaton1CoJRadioButton.isSelected();
		int a1States = this.type0Automaton1StatesJComboBox.getSelectedIndex();
		// attributes of the second automaton
		int a2NumberOfStatesMin = 0;
		int a2NumberOfStatesMax = 0;
		int a2NumberOfFinalStatesMin = 0;
		int a2NumberOfFinalStatesMax = 0;
		int a2NumberOfTransitionsMin = 0;
		int a2NumberOfTransitionsMax = 0;
		boolean a2TotalTransitionFunction = this.type0Automaton2TotalTransitionFunctionJCheckBox.isSelected();
		boolean a2Complement = this.type0Automaton2CoJRadioButton.isSelected();
		int a2States = this.type0Automaton2StatesJComboBox.getSelectedIndex();
		// result, the optional parameters are -1, if tey are not set
		int outputStatesMin = -1;
		int outputStatesMax = -1;
		int outputTransitionsMin = -1;
		int outputTransitionsMax = -1;
		boolean outputMinOneFinalState = this.type0OutputAutomatonMinOneFinalStateJCheckBox.isSelected();
		try
		{
			a1NumberOfStatesMin = Integer.parseInt(this.type0Automaton1StatesMinJTextField.getText());
			a1NumberOfStatesMax = Integer.parseInt(this.type0Automaton1StatesMaxJTextField.getText());
			a1NumberOfFinalStatesMin = Integer.parseInt(this.type0Automaton1FinalStatesMinJTextField.getText());
			a1NumberOfFinalStatesMax = Integer.parseInt(this.type0Automaton1FinalStatesMaxJTextField.getText());
			a1NumberOfTransitionsMin = Integer.parseInt(this.type0Automaton1TransitionsMinJTextField.getText());
			a1NumberOfTransitionsMax = Integer.parseInt(this.type0Automaton1TransitionsMaxJTextField.getText());
			sizeOfAlphabetMin = Integer.parseInt(this.type0Automaton1AlphabetMinJTextField.getText());
			sizeOfAlphabetMax = Integer.parseInt(this.type0Automaton1AlphabetMaxJTextField.getText());
			a2NumberOfStatesMin = Integer.parseInt(this.type0Automaton2StatesMinJTextField.getText());
			a2NumberOfStatesMax = Integer.parseInt(this.type0Automaton2StatesMaxJTextField.getText());
			a2NumberOfFinalStatesMin = Integer.parseInt(this.type0Automaton2FinalStatesMinJTextField.getText());
			a2NumberOfFinalStatesMax = Integer.parseInt(this.type0Automaton2FinalStatesMaxJTextField.getText());
			a2NumberOfTransitionsMin = Integer.parseInt(this.type0Automaton2TransitionsMinJTextField.getText());
			a2NumberOfTransitionsMax = Integer.parseInt(this.type0Automaton2TransitionsMaxJTextField.getText());
			if (!(this.type0OutputAutomatonStatesMinJTextField.getText().isEmpty())
				&& !(this.type0OutputAutomatonStatesMaxJTextField.getText().isEmpty()))
			{
				outputStatesMin = Integer.parseInt(this.type0OutputAutomatonStatesMinJTextField.getText());
				outputStatesMax = Integer.parseInt(this.type0OutputAutomatonStatesMaxJTextField.getText());
				if (outputStatesMin < 1)
				{
					this.showWarningDialog("The output automaton panel:\n" + "number of states min < 1.");
					return;
				}
			}
			if (!(this.type0OutputAutomatonTransitionsMinJTextField.getText().isEmpty())
				&& !(this.type0OutputAutomatonTransitionsMaxJTextField.getText().isEmpty()))
			{
				outputTransitionsMin = Integer.parseInt(this.type0OutputAutomatonTransitionsMinJTextField.getText());
				outputTransitionsMax = Integer.parseInt(this.type0OutputAutomatonTransitionsMaxJTextField.getText());
				if (outputTransitionsMin < 0)
				{
					this.showWarningDialog("The output automaton panel:\n" + "number of transitions min < 0.");
					return;
				}
			}
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The fields have to be filled with number >= 0.");
			return;
		}
		// check the input for the automaton 1
		if (a1NumberOfStatesMin < 1 || a1NumberOfStatesMax < 1)
		{
			this.showWarningDialog("The pane automaton A panel:\n" + "Number of states min, max must be >= 1.");
			return;
		}
		if ((a1NumberOfFinalStatesMin < 0) || (a1NumberOfFinalStatesMax < 0) || (a1NumberOfTransitionsMin < 0)
			|| (a1NumberOfTransitionsMax < 0) || (sizeOfAlphabetMin < 0) || (sizeOfAlphabetMax < 0))
		{
			this.showWarningDialog("The pane automaton A panel:\n" + "The fields \nhave to be filled with number >= 0.");
			return;
		}
		if (a1NumberOfStatesMin > a1NumberOfStatesMax)
		{
			this.showWarningDialog("The automaton A panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (a1NumberOfFinalStatesMin > a1NumberOfFinalStatesMax)
		{
			this.showWarningDialog("The automaton A panel:\n"
				+ "number of final states min > number of final states max.");
			return;
		}
		if (a1NumberOfTransitionsMin > a1NumberOfTransitionsMax)
		{
			this.showWarningDialog("The automaton A panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		if (sizeOfAlphabetMin > sizeOfAlphabetMax)
		{
			this.showWarningDialog("Automaton A panel:\n" + "size of alphabet min > size of alphabet max.");
			return;
		}
		if (a1NumberOfFinalStatesMin > a1NumberOfStatesMax)
		{
			this.showWarningDialog("The automaton A panel:\n" + "number of final states min > number of states max.");
			return;
		}
		if (sizeOfAlphabetMin > a1NumberOfTransitionsMax)
		{
			this.showWarningDialog("The automaton A panel:\n" + "size of alphabet min > number of transitions max.");
			return;
		}
		if (a1NumberOfTransitionsMin > a1NumberOfStatesMax * a1NumberOfStatesMax * sizeOfAlphabetMax)
		{
			this.showWarningDialog("The automaton A panel:\n" + "number of transitions min > "
				+ "((number of states max)^2 * (size of alphabet max)).");
			return;
		}
		if (a1TotalTransitionFunction && (a1NumberOfStatesMin * sizeOfAlphabetMin > a1NumberOfTransitionsMax))
		{
			this.showWarningDialog("The automaton A panel:\n" + "total transition function && "
				+ "(number of states min * size of alphabet max) < " + "number of transitions max).");
			return;
		}
		// check the input for automaton 2
		if (a2NumberOfStatesMin < 1 || a2NumberOfStatesMax < 1)
		{
			this.showWarningDialog("The pane automaton B panel:\n" + "Number of states min, max must be >= 1.");
			return;
		}
		if ((a2NumberOfFinalStatesMin < 0) || (a2NumberOfFinalStatesMax < 0) || (a2NumberOfTransitionsMin < 0)
			|| (a2NumberOfTransitionsMax < 0))
		{
			this.showWarningDialog("The pane automaton B panel:\n" + "The fields \nhave to be filled with number >= 0.");
			return;
		}
		if (a2NumberOfStatesMin > a2NumberOfStatesMax)
		{
			this.showWarningDialog("The automaton B panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (a2NumberOfFinalStatesMin > a2NumberOfFinalStatesMax)
		{
			this.showWarningDialog("The automaton B panel:\n"
				+ "number of final states min > number of final states max.");
			return;
		}
		if (a2NumberOfTransitionsMin > a2NumberOfTransitionsMax)
		{
			this.showWarningDialog("The automaton B panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		if (sizeOfAlphabetMin > a2NumberOfTransitionsMax)
		{
			this.showWarningDialog("The automaton B panel:\n" + "size of alphabet min > number of transitions max.");
			return;
		}
		if (a2NumberOfTransitionsMin > a2NumberOfStatesMax * a2NumberOfStatesMax * sizeOfAlphabetMax)
		{
			this.showWarningDialog("The automaton B panel:\n" + "number of transitions min > "
				+ "((number of states max)^2 * (size of alphabet max)).");
			return;
		}
		if (a2TotalTransitionFunction && (a2NumberOfStatesMin * sizeOfAlphabetMin > a2NumberOfTransitionsMax))
		{
			this.showWarningDialog("The automaton B panel:\n" + "total transition function && "
				+ "(number of states min * size of alphabet max) < " + "number of transitions max).");
			return;
		}
		// check output attributes
		if (outputStatesMin > outputStatesMax)
		{
			this.showWarningDialog("The output automaton panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (outputTransitionsMin > outputTransitionsMax)
		{
			this.showWarningDialog("The output automaton panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		if (outputStatesMin > (a1NumberOfStatesMin + (a1TotalTransitionFunction ? 0 : 1))
			* (a2NumberOfStatesMin + (a2TotalTransitionFunction ? 0 : 1)))
		{
			this.showWarningDialog("The output automaton panel:\n" + "output states min > (a1NumberOfStatesMin + "
				+ "(a1TotalTransitionFunction?0:1)) * (a2NumberOfStatesMin + " + "(a2TotalTransitionFunction?0:1))");
			return;
		}
		if (outputTransitionsMax > 0)
		{
			if (outputTransitionsMax < (a1NumberOfStatesMin + (a1TotalTransitionFunction ? 0 : 1))
				* (a2NumberOfStatesMin + (a2TotalTransitionFunction ? 0 : 1)) * sizeOfAlphabetMin)
			{
				this.showWarningDialog("The output automaton panel:\n" + "output states max < (a1NumberOfStatesMin + "
					+ "(a1TotalTransitionFunction?0:1)) * " + "(a2NumberOfStatesMin + "
					+ "(a2TotalTransitionFunction?0:1) * sizeOfAlphabetMin)");
				return;
			}
		}
		(t0 = new T0Generator(numberOfExercises, operation, alphabet, sizeOfAlphabetMin, sizeOfAlphabetMax,
			a1NumberOfStatesMin, a1NumberOfStatesMax, a1NumberOfFinalStatesMin, a1NumberOfFinalStatesMax,
			a1NumberOfTransitionsMin, a1NumberOfTransitionsMax, a1States, a1TotalTransitionFunction, a1Complement,
			a2NumberOfStatesMin, a2NumberOfStatesMax, a2NumberOfFinalStatesMin, a2NumberOfFinalStatesMax,
			a2NumberOfTransitionsMin, a2NumberOfTransitionsMax, a2States, a2TotalTransitionFunction, a2Complement,
			outputStatesMin, outputStatesMax, outputTransitionsMin, outputTransitionsMax, outputMinOneFinalState))
			.execute();
	}

	/**
	 * parses the input and make the working thread, which computes the result and prints it into given output
	 * 
	 * @param output
	 *            map; keyset are strings: plainText, plainTextEN, IS, ISEN, latex, latexEN; values the JTextAreas,
	 *            where the result is printed
	 */
	private void getExerciseT1(Map<String, JTextArea> output)
	{
		int numberOfExercises = 0;
		try
		{
			numberOfExercises = Integer.parseInt(this.exercisesJTextField.getText());
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises <= 0)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises > 500)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number <= 500.");
			return;
		}
		this.setProggressBar(numberOfExercises);
		this.setProgress(0);

		int operationFrom = this.type1OperationFromJComboBox.getSelectedIndex();
		int operationTo = this.type1OperationFromJComboBox.getItemCount()
			- this.type1OperationToJComboBox.getItemCount() + this.type1OperationToJComboBox.getSelectedIndex();
		int alphabet = this.type1InputAutomatonAlphabetJComboBox.getSelectedIndex();
		int states = this.type1InputAutomatonStatesJComboBox.getSelectedIndex();
		boolean firstStateNotInitial = this.type1InputAutomatonFirstStateJCheckBox.isSelected();
		boolean totalTransitionFunction = this.type1InputAutomatonTotalTransitionFunctionJCheckBox.isSelected();
		boolean stepsWriteOut = this.type1MinimizationStepsJCheckBox.isSelected();
		int numberOfStatesMin = 0;
		int numberOfStatesMax = 0;
		int numberOfFinalStatesMin = 0;
		int numberOfFinalStatesMax = 0;
		int numberOfTransitionsMin = 0;
		int numberOfTransitionsMax = 0;
		int sizeOfAlphabetMin = 0;
		int sizeOfAlphabetMax = 0;
		// optional parameters
		int numberOfStepsMin = -1; // is -1, if is not set
		int numberOfStepsMax = -1; // is -1, if is not set
		int numberOfUnreachableStatesMin = 0;
		int numberOfUnreachableStatesMax = 0;
		int resultNumberOfStatesMin = -1; // is -1, if is not set
		int resultNumberOfStatesMax = -1; // is -1, if is not set
		int resultNumberOfTransitionsMin = -1; // is -1, if is not set
		int resultNumberOfTransitionsMax = -1; // is -1, if is not set
		try
		{
			numberOfStatesMin = Integer.parseInt(this.type1InputAutomatonStatesMinJTextField.getText());
			numberOfStatesMax = Integer.parseInt(this.type1InputAutomatonStatesMaxJTextField.getText());
			numberOfFinalStatesMin = Integer.parseInt(this.type1InputAutomatonFinalStatesMinJTextField.getText());
			numberOfFinalStatesMax = Integer.parseInt(this.type1InputAutomatonFinalStatesMaxJTextField.getText());
			numberOfTransitionsMin = Integer.parseInt(this.type1InputAutomatonTransitionsMinJTextField.getText());
			numberOfTransitionsMax = Integer.parseInt(this.type1InputAutomatonTransitionsMaxJTextField.getText());
			sizeOfAlphabetMin = Integer.parseInt(this.type1InputAutomatonAlphabetMinJTextField.getText());
			sizeOfAlphabetMax = Integer.parseInt(this.type1InputAutomatonAlphabetMaxJTextField.getText());

			if (!this.type1InputAutomatonUnreachableStatesMinJTextField.getText().isEmpty()
				&& !(this.type1InputAutomatonUnreachableStatesMaxJTextField.getText().isEmpty()))
			{
				numberOfUnreachableStatesMin = Integer.parseInt(this.type1InputAutomatonUnreachableStatesMinJTextField
					.getText());
				numberOfUnreachableStatesMax = Integer.parseInt(this.type1InputAutomatonUnreachableStatesMaxJTextField
					.getText());
				if ((numberOfUnreachableStatesMin < 0) || (numberOfUnreachableStatesMax < 0))
				{
					this.showWarningDialog("The input automaton panel:\n"
						+ "The fields number of unreachable states min, "
						+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
					return;
				}
			}
			else
			{
				numberOfUnreachableStatesMax = numberOfStatesMax - 1;
			}
			if (!(this.type1MinimizationStepsMinJTextField.getText().isEmpty())
				|| !(this.type1MinimizationStepsMaxJTextField.getText().isEmpty()))
			{
				numberOfStepsMin = Integer.parseInt(this.type1MinimizationStepsMinJTextField.getText());
				numberOfStepsMax = Integer.parseInt(this.type1MinimizationStepsMaxJTextField.getText());
				if (numberOfStepsMin <= 0 || numberOfStepsMax <= 0)
				{
					this.showWarningDialog("The minimization panel:\n"
						+ "The fields (number of steps min, max) do not " + "have to be filled\n"
						+ "or must be filled with number > 0.");
					return;
				}
			}
			if (!(this.type1OutputAutomatonStatesMinJTextField.getText().isEmpty())
				&& !(this.type1OutputAutomatonStatesMaxJTextField.getText().isEmpty()))
			{
				resultNumberOfStatesMin = Integer.parseInt(this.type1OutputAutomatonStatesMinJTextField.getText());
				resultNumberOfStatesMax = Integer.parseInt(this.type1OutputAutomatonStatesMaxJTextField.getText());
				if (resultNumberOfStatesMin < 1)
				{
					this.showWarningDialog("The output automaton panel:\n" + "number of states min < 1.");
					return;
				}
			}
			if (!(this.type1OutputAutomatonTransitionsMinJTextField.getText().isEmpty())
				&& !(this.type1OutputAutomatonTransitionsMaxJTextField.getText().isEmpty()))
			{
				resultNumberOfTransitionsMin = Integer.parseInt(this.type1OutputAutomatonTransitionsMinJTextField
					.getText());
				resultNumberOfTransitionsMax = Integer.parseInt(this.type1OutputAutomatonTransitionsMaxJTextField
					.getText());
				if (resultNumberOfTransitionsMin < 0)
				{
					this.showWarningDialog("The output automaton panel:\n" + "number of transitions min < 0.");
					return;
				}
			}
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The fields have to be filled with number >= 0.");
			return;
		}
		// check the input
		// attributes of the input automatom panel
		if ((numberOfStatesMin < 1) || (numberOfStatesMax < 1))
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "the number of states min, max must be filled with number > 1.");
			return;
		}
		if ((numberOfFinalStatesMin < 0) || (numberOfFinalStatesMax < 0) || (numberOfTransitionsMin < 0)
			|| (numberOfTransitionsMax < 0) || (sizeOfAlphabetMin < 0) || (sizeOfAlphabetMax < 0))
		{
			this.showWarningDialog("The input automaton panel:\n" + "The fields have to be filled with number >= 0.\n"
				+ "The fields unreachable states min, max do not have\n"
				+ "to be filled or must be filled with number >= 0.");
			return;
		}
		if (totalTransitionFunction && (numberOfStatesMin * sizeOfAlphabetMin > numberOfTransitionsMax))
		{
			this.showWarningDialog("The input automaton panel:\n" + "total transition function && "
				+ "(number of states min * size of alphabet max > " + "number of transitions max).");
			return;
		}
		if (numberOfStatesMin > numberOfStatesMax)
		{
			this.showWarningDialog("The input automaton panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (numberOfFinalStatesMin > numberOfFinalStatesMax)
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "number of final states min > number of final states max.");
			return;
		}
		if (numberOfTransitionsMin > numberOfTransitionsMax)
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		if (sizeOfAlphabetMin > sizeOfAlphabetMax)
		{
			this.showWarningDialog("The input automaton panel:\n" + "size of alphabet min > size of alphabet max.");
			return;
		}
		if (numberOfUnreachableStatesMin > numberOfUnreachableStatesMax)
		{
			this.showWarningDialog("The input automaton panel:\n" + "nnumber of unreachable states min > "
				+ "number of unreachable states max.");
			return;
		}
		if (numberOfFinalStatesMin > numberOfStatesMax)
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "number of final states min > number of states max.");
			return;
		}
		if (sizeOfAlphabetMin > numberOfTransitionsMax)
		{
			this.showWarningDialog("The input automaton panel:\n" + "size of alphabet min > number of transitions max.");
			return;
		}
		if (operationFrom == 0)
		{
			if (numberOfTransitionsMin > numberOfStatesMax * numberOfStatesMax * (sizeOfAlphabetMax + 1))
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of transitions min > "
					+ "(number of states max)^2 * (size of alphabet max + 1).");
				return;
			}
		}
		else
		{
			if (numberOfTransitionsMin > numberOfStatesMax * numberOfStatesMax * sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of transitions min > "
					+ "(number of states max)^2 * (size of alphabet max).");
				return;
			}
		}
		if (firstStateNotInitial && numberOfStatesMax == 1)
		{
			this.showWarningDialog("The input automaton panel:\n"
				+ "first state not initial && (number of states max = 1).");
		}
		// minimization
		if (numberOfStepsMin > numberOfStepsMax)
		{
			this.showWarningDialog("The minimization panel:\n" + "number of steps min > number of steps max.");
			return;
		}
		// output automaton
		if (resultNumberOfStatesMin > resultNumberOfStatesMax)
		{
			this.showWarningDialog("The output automaton panel:\n" + "number of states min > number of states max.");
			return;
		}
		if (resultNumberOfTransitionsMin > resultNumberOfTransitionsMax)
		{
			this.showWarningDialog("The output automaton panel:\n"
				+ "number of transitions min > number of transitions max.");
			return;
		}
		// (t1 = new T1Generator(numberOfExercises, operationFrom, operationTo, numberOfStatesMin, numberOfStatesMax,
		// numberOfFinalStatesMin, numberOfFinalStatesMax, numberOfTransitionsMin, numberOfTransitionsMax,
		// sizeOfAlphabetMin, sizeOfAlphabetMax, alphabet, states, stepsWriteOut, totalTransitionFunction,
		// firstStateNotInitial, numberOfStepsMin, numberOfStepsMax, numberOfUnreachableStatesMin,
		// numberOfUnreachableStatesMax, resultNumberOfStatesMin, resultNumberOfStatesMax,
		// resultNumberOfTransitionsMin, resultNumberOfTransitionsMax)).execute();
	}

	/**
	 * parses the input and make the working thread, which computes the result and prints it into given output
	 * 
	 * @param output
	 *            map; keyset are strings: plainText, plainTextEN, IS, ISEN, latex, latexEN; values the JTextAreas,
	 *            where the result is printed
	 */
	private void getExerciseT2(Map<String, JTextArea> output)
	{
		int numberOfExercises = 0;
		try
		{
			numberOfExercises = Integer.parseInt(this.exercisesJTextField.getText());
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises <= 0)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises > 500)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number <= 500.");
			return;
		}
		this.setProggressBar(numberOfExercises);
		this.setProgress(0);

		int operation = this.type2OperationJComboBox.getSelectedIndex();
		// NFA -> REGULAR GRAMMAR
		if (operation == 0)
		{
			int numberOfStatesMin = 0;
			int numberOfStatesMax = 0;
			int numberOfFinalStatesMin = 0;
			int numberOfFinalStatesMax = 0;
			int numberOfTransitionsMin = 0;
			int numberOfTransitionsMax = 0;
			int sizeOfAlphabetMin = 0;
			int sizeOfAlphabetMax = 0;
			// optional atributes
			int numberOfUnreachableStatesMin = 0;
			int numberOfUnreachableStatesMax = 0;
			int resultNumberOfVariablesMin = -1; // -1, if is not set
			int resultNumberOfVariablesMax = -1; // -1, if is not set
			int resultNumberOfTerminalsMin = -1; // -1, if is not set
			int resultNumberOfTerminalsMax = -1; // -1, if is not set
			int resultNumberOfRulesMin = -1; // -1, if is not set
			int resultNumberOfRulesMax = -1; // -1, if is not set
			int alphabet = this.type2InputAutomatonAlphabetJComboBox.getSelectedIndex();
			int states = this.type2InputAutomatonStatesJComboBox.getSelectedIndex();
			boolean epsilon = this.type2OutputGRammarEpsilonJCheckBox.isSelected();
			try
			{
				numberOfStatesMin = Integer.parseInt(this.type2InputAutomatonStatesMinJTextField.getText());
				numberOfStatesMax = Integer.parseInt(this.type2InputAutomatonStatesMaxJTextField.getText());
				numberOfFinalStatesMin = Integer.parseInt(this.type2InputAutomatonFinalStatesMinJTextField.getText());
				numberOfFinalStatesMax = Integer.parseInt(this.type2InputAutomatonFinalStatesMaxJTextField.getText());
				numberOfTransitionsMin = Integer.parseInt(this.type2InputAutomatonTransitionsMinJTextField.getText());
				numberOfTransitionsMax = Integer.parseInt(this.type2InputAutomatonTransitionsMaxJTextField.getText());
				sizeOfAlphabetMin = Integer.parseInt(this.type2InputAutomatonAlphabetMinJTextField.getText());
				sizeOfAlphabetMax = Integer.parseInt(this.type2InputAutomatonAlphabetMaxJTextField.getText());
				if (!this.type2InputAutomatonUnreachableStatesMinJTextField.getText().isEmpty()
					&& !(this.type2InputAutomatonUnreachableStatesMaxJTextField.getText().isEmpty()))
				{
					numberOfUnreachableStatesMin = Integer
						.parseInt(this.type2InputAutomatonUnreachableStatesMinJTextField.getText());
					numberOfUnreachableStatesMax = Integer
						.parseInt(this.type2InputAutomatonUnreachableStatesMaxJTextField.getText());
					if (numberOfUnreachableStatesMin < 0)
					{
						this.showWarningDialog("The pane Input automaton:\n"
							+ "The fields number of unreachable states min, max\n"
							+ "do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
				}
				else
				{
					numberOfUnreachableStatesMax = numberOfStatesMax - 1;
					// if unreachable states min, max is not set ->
					// unreachable states min = 0
					// unreachable states max = (states max - 1)
				}
				if (!this.type2OutputGrammarTerminalsMinJTextField.getText().isEmpty()
					&& !(this.type2OutputGrammarTerminalsMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfTerminalsMin = Integer.parseInt(this.type2OutputGrammarTerminalsMinJTextField
						.getText());
					resultNumberOfTerminalsMax = Integer.parseInt(this.type2OutputGrammarTerminalsMaxJTextField
						.getText());
					if (resultNumberOfTerminalsMin < 0)
					{
						this.showWarningDialog("The pane output grammar:\n" + "The fields number of terminals min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
					if (resultNumberOfTerminalsMin > sizeOfAlphabetMax)
					{
						this.showWarningDialog("The pane output grammar:\n" + "terminals min > size of alphabet max.");
						return;
					}
				}
				if (!this.type2OutputGrammarVariablesMinJTextField.getText().isEmpty()
					&& !(this.type2OutputGrammarVariablesMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfVariablesMin = Integer.parseInt(this.type2OutputGrammarVariablesMinJTextField
						.getText());
					resultNumberOfVariablesMax = Integer.parseInt(this.type2OutputGrammarVariablesMaxJTextField
						.getText());
					if (resultNumberOfVariablesMin < 1)
					{
						this.showWarningDialog("The pane output grammar:\n"
							+ "The fields number of non-terminals min, max \n"
							+ " do not have to be filled or have to be filled " + "with number >= 1.");
						return;
					}
					if (resultNumberOfVariablesMin > numberOfStatesMax + 1)
					{
						this.showWarningDialog("The pane output grammar:\n"
							+ "non-terminals min > (number of states max + 1).");
						return;
					}
				}
				if (!this.type2OutputGrammarRulesMinJTextField.getText().isEmpty()
					&& !(this.type2OutputGrammarRulesMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfRulesMin = Integer.parseInt(this.type2OutputGrammarRulesMinJTextField.getText());
					resultNumberOfRulesMax = Integer.parseInt(this.type2OutputGrammarRulesMaxJTextField.getText());
					if (resultNumberOfRulesMin < 1)
					{
						this.showWarningDialog("The pane output grammar:\n" + "The fields number of rules min, "
							+ "max \n do not have to be filled or have to be filled " + "with number <= 1.");
						return;
					}
					if (resultNumberOfRulesMax > sizeOfAlphabetMax * numberOfTransitionsMax + 1)
					{
						this.showWarningDialog("The pane output grammar:\n" + "rules max > (size of alphabet max) * "
							+ "(number of transitions max + 1).");
						return;
					}
					if (resultNumberOfRulesMax < numberOfTransitionsMin)
					{
						this.showWarningDialog("The pane output grammar:\n" + "rules min < number of transitions min");
						return;
					}
				}
			}
			catch (NumberFormatException ex)
			{
				this.showWarningDialog("The fields have to be filled with number >= 0.");
				return;
			}
			// check the input
			// automaton
			if ((numberOfStatesMin < 1) || (numberOfStatesMax < 1))
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "the number of states min, max must be filled with number > 1.");
				return;
			}
			if ((numberOfFinalStatesMin < 0) || (numberOfFinalStatesMax < 0) || (numberOfTransitionsMin < 0)
				|| (numberOfTransitionsMax < 0) || (sizeOfAlphabetMin < 0) || (sizeOfAlphabetMax < 0))
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "The fields (except number of unreachable states min, "
					+ "max)\nhave to be filled with number >= 0.");
				return;
			}
			if (numberOfStatesMin > numberOfStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of states min > number of states max.");
				return;
			}
			if (numberOfFinalStatesMin > numberOfFinalStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of final states min > number of final states max.");
				return;
			}
			if (numberOfTransitionsMin > numberOfTransitionsMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of transitions min > number of transitions max.");
				return;
			}
			if (sizeOfAlphabetMin > sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "size of alphabet min > size of alphabet max.");
				return;
			}
			if (numberOfUnreachableStatesMin > numberOfUnreachableStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of unreachable states min > "
					+ "number of unreachable states max.");
				return;
			}
			if (numberOfFinalStatesMin > numberOfStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of final states min > number of states max.");
				return;
			}
			if (sizeOfAlphabetMin > numberOfTransitionsMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "size of alphabet min > number of transitions max.");
				return;
			}
			// output grammar
			if (resultNumberOfTerminalsMin > resultNumberOfTerminalsMax)
			{
				this.showWarningDialog("The output regular grammar panel:\n"
					+ "number of terminals min > number of terminals max.");
				return;
			}
			if (resultNumberOfVariablesMin > resultNumberOfVariablesMax)
			{
				this.showWarningDialog("The output regular grammar panel:\n"
					+ "number of non-terminals min > number of non-terminals max.");
				return;
			}
			if (resultNumberOfRulesMin > resultNumberOfRulesMax)
			{
				this.showWarningDialog("The output regular grammar panel:\n"
					+ "number of rules min > number of rules max.");
				return;
			}
			if (resultNumberOfVariablesMin > numberOfStatesMax + 1)
			{
				this.showWarningDialog("The output regular grammar panel:\n"
					+ "number of non-terminals min > number of states max + 1.");
				return;
			}
			// (t2 = new T2Generator(numberOfExercises, numberOfStatesMin, numberOfStatesMax, numberOfFinalStatesMin,
			// numberOfFinalStatesMax, numberOfTransitionsMin, numberOfTransitionsMax, sizeOfAlphabetMin,
			// sizeOfAlphabetMax, alphabet, states, epsilon, numberOfUnreachableStatesMin,
			// numberOfUnreachableStatesMax, resultNumberOfVariablesMin, resultNumberOfVariablesMax,
			// resultNumberOfRulesMin, resultNumberOfRulesMax, resultNumberOfTerminalsMin, resultNumberOfTerminalsMax))
			// .execute();
		} // REGULAR GRAMMAR -> NFA
		else
		{
			int terminals = 0;
			int variables = 0;
			int numberOfVariablesMin = 0;
			int numberOfVariablesMax = 0;
			int numberOfTerminalsMin = 0;
			int numberOfTerminalsMax = 0;
			int numberOfRulesMin = 0;
			int numberOfRulesMax = 0;
			boolean epsilon = this.type2InputGrammarEpsilonJCheckBox.isSelected();
			// optional attributes
			int resultNumberOfStatesMin = -1; // -1, if is not set
			int resultNumberOfStatesMax = -1; // -1, if is not set
			int resultNumberOfTransitionsMin = -1; // -1, if is not set
			int resultNumberOfTransitionsMax = -1; // -1, if is not set
			int resultSizeOfAlphabetMin = -1; // -1, if is not set
			int resultSizeOfAlphabetMax = -1; // -1, if is not set
			int resultNumberOfUnreachableStatesMin = -1; // -1, if is not set
			int resultNumberOfUnreachableStatesMax = -1; // -1, if is not set
			switch (this.type2InputGrammarTerminalsJComboBox.getSelectedIndex())
			{
				case 0:
					terminals = 0;
					break;
				case 1:
					terminals = 2;
					break;
				case 2:
					terminals = 3;
					break;
				case 3:
					terminals = 5;
					break;
				case 4:
					terminals = 6;
					break;
				case 5:
					terminals = 8;
					break;
				case 6:
					terminals = 9;
					break;
			}
			switch (this.type2InputGrammarVariablesJComboBox.getSelectedIndex())
			{
				case 0:
					variables = 1;
					break;
				case 1:
					variables = 4;
					break;
				case 2:
					variables = 5;
					break;
				case 3:
					variables = 6;
					break;
				case 4:
					variables = 7;
					break;
			}
			try
			{
				numberOfVariablesMin = Integer.parseInt(this.type2InputGrammarVariablesMinJTextField.getText());
				numberOfVariablesMax = Integer.parseInt(this.type2InputGrammarVariablesMaxJTextField.getText());
				numberOfRulesMin = Integer.parseInt(this.type2InputGrammarRulesMinJTextField.getText());
				numberOfRulesMax = Integer.parseInt(this.type2InputGrammarRulesMaxJTextField.getText());
				numberOfTerminalsMin = Integer.parseInt(this.type2InputGrammarTerminalsMinJTextField.getText());
				numberOfTerminalsMax = Integer.parseInt(this.type2InputGrammarTerminalsMaxJTextField.getText());
				if (!this.type2OutputAutomatonStatesMinJTextField.getText().isEmpty()
					&& !(this.type2OutputAutomatonStatesMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfStatesMin = Integer.parseInt(this.type2OutputAutomatonStatesMinJTextField.getText());
					resultNumberOfStatesMax = Integer.parseInt(this.type2OutputAutomatonStatesMaxJTextField.getText());
					if (resultNumberOfStatesMin < 1)
					{
						this.showWarningDialog("The pane output automaton:\n" + "The fields number of states min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 1.");
						return;
					}
					if (resultNumberOfStatesMin > numberOfVariablesMax + 1)
					{
						this.showWarningDialog("result number of states min > " + "(number of non-terminals max+1)");
						return;
					}
				}
				if (!this.type2OutputAutomatonTransitionsMinJTextField.getText().isEmpty()
					&& !(this.type2OutputAutomatonTransitionsMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfTransitionsMin = Integer.parseInt(this.type2OutputAutomatonTransitionsMinJTextField
						.getText());
					resultNumberOfTransitionsMax = Integer.parseInt(this.type2OutputAutomatonTransitionsMaxJTextField
						.getText());
					if (resultNumberOfTransitionsMin < 0)
					{
						this.showWarningDialog("The pane output automaton:\n"
							+ "The fields number of transitions min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
					/*
					 * if(resultNumberOfTransitionsMin>numberOfRulesMax){
					 * this.showWarningDialog("resultNumberOfTransitionsMin>numberOfRulesMax"); return; }
					 */
				}
				if (!this.type2OutputAutomatonAlphabetMinJTextField.getText().isEmpty()
					&& !(this.type2OutputAutomatonAlphabetMaxJTextField.getText().isEmpty()))
				{
					resultSizeOfAlphabetMin = Integer
						.parseInt(this.type2OutputAutomatonAlphabetMinJTextField.getText());
					resultSizeOfAlphabetMax = Integer
						.parseInt(this.type2OutputAutomatonAlphabetMaxJTextField.getText());
					if (resultSizeOfAlphabetMin < 0)
					{
						this.showWarningDialog("The pane output automaton:\n" + "The fields size of alphabet min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
					if (resultSizeOfAlphabetMin > numberOfTerminalsMax)
					{
						this.showWarningDialog("size of alphabet min > " + "number of terminals max");
						return;
					}
				}
				if (!this.type2OutputAutomatonUnreachableStatesMinJTextField.getText().isEmpty()
					&& !(this.type2OutputAutomatonUnreachableStatesMaxJTextField.getText().isEmpty()))
				{
					resultNumberOfUnreachableStatesMin = Integer
						.parseInt(this.type2OutputAutomatonUnreachableStatesMinJTextField.getText());
					resultNumberOfUnreachableStatesMax = Integer
						.parseInt(this.type2OutputAutomatonUnreachableStatesMaxJTextField.getText());
					if (resultNumberOfUnreachableStatesMin < 0)
					{
						this.showWarningDialog("The pane output automaton:\n"
							+ "The fields number of unreachable states min, "
							+ "max \n do not have to be filled or have to be filled " + "with number >= 0.");
						return;
					}
				}

			}
			catch (NumberFormatException ex)
			{
				this.showWarningDialog("The fields have to be filled with number >= 0.");
				return;
			}
			// check the input
			if (resultNumberOfStatesMin > resultNumberOfStatesMax)
			{
				this.showWarningDialog("The output automaton panel:\n" + "number of states min > number of states max.");
				return;
			}
			if (resultNumberOfTransitionsMin > resultNumberOfTransitionsMax)
			{
				this.showWarningDialog("The output automaton panel:\n"
					+ "number of transitions min > number of transitions max.");
				return;
			}
			if (resultSizeOfAlphabetMin > resultSizeOfAlphabetMax)
			{
				this.showWarningDialog("The output automaton panel:\n" + "size of alphabet min > size of alphabet max.");
				return;
			}
			if (resultSizeOfAlphabetMin > -1 && resultNumberOfTransitionsMax > -1)
				if (resultSizeOfAlphabetMin > resultNumberOfTransitionsMax)
				{
					this.showWarningDialog("The output automaton panel:\n"
						+ "size of alphabet min > number of transitions max.");
					return;
				}
			if ((numberOfVariablesMin < 1) || (numberOfVariablesMax < 1))
			{
				this.showWarningDialog("The input grammar panel:\n"
					+ "The fields number of non-terminals min, max have to be " + "filled with number >= 1.");
				return;
			}
			if ((numberOfRulesMin < 0) || (numberOfRulesMax < 0) || (numberOfTerminalsMin < 0)
				|| (numberOfTerminalsMax < 0))
			{
				this.showWarningDialog("The input grammar panel:\n" + "The fields have to be filled with number >= 0.");
				return;
			}
			if (numberOfTerminalsMin > numberOfTerminalsMax)
			{
				this.showWarningDialog("The input grammar panel:\n"
					+ "number of terminals min > number of terminals max.");
				return;
			}
			if (numberOfVariablesMin > numberOfVariablesMax)
			{
				this.showWarningDialog("The input grammar panel:\n"
					+ "number of non-terminals min > number of non-terminals max.");
				return;
			}
			if (numberOfRulesMin > numberOfRulesMax)
			{
				this.showWarningDialog("The input grammar panel:\n" + "number of rules min > number of rules max.");
				return;
			}
			if (resultNumberOfUnreachableStatesMin > resultNumberOfUnreachableStatesMax)
			{
				this.showWarningDialog("The output automaton panel:\n"
					+ "number of unreachable states min > number of unreachable states max.");
				return;
			}
			// (t2 = new T2Generator(numberOfExercises, numberOfVariablesMin, numberOfVariablesMax, numberOfRulesMin,
			// numberOfRulesMax, numberOfTerminalsMin, numberOfTerminalsMax, terminals, variables, epsilon,
			// resultNumberOfStatesMin, resultNumberOfStatesMax, resultNumberOfTransitionsMin,
			// resultNumberOfTransitionsMax, resultSizeOfAlphabetMin, resultSizeOfAlphabetMax,
			// resultNumberOfUnreachableStatesMin, resultNumberOfUnreachableStatesMax)).execute();
		}
	}

	/**
	 * parses the input and make the working thread, which computes the result and prints it into given output
	 * 
	 * @param output
	 *            map; keyset are strings: plainText, plainTextEN, IS, ISEN, latex, latexEN; values the JTextAreas,
	 *            where the result is printed
	 */
	private void getExerciseT3(Map<String, JTextArea> output)
	{
		int numberOfExercises = 0;
		try
		{
			numberOfExercises = Integer.parseInt(this.exercisesJTextField.getText());
		}
		catch (NumberFormatException ex)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises <= 0)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number > 0.");
			return;
		}
		if (numberOfExercises > 500)
		{
			this.showWarningDialog("The generating panel:\n the field "
				+ "number of exercises has to be filled with number <= 500.");
			return;
		}
		this.setProggressBar(numberOfExercises);
		this.setProgress(0);
		// DFA -> RE
		if (this.type3OperationJComboBox.getSelectedIndex() == 0)
		{
			// the input automaton panel
			int sizeOfAlphabetMin = 0;
			int sizeOfAlphabetMax = 0;
			int numberOfStatesMin = 0;
			int numberOfStatesMax = 0;
			int numberOfFinalStatesMin = 0;
			int numberOfFinalStatesMax = 0;
			int numberOfTransitionsMin = 0;
			int numberOfTransitionsMax = 0;

			int alphabet = this.type3InputAutomatonAlphabetJComboBox.getSelectedIndex();
			int states = this.type3InputAutomatonStatesJComboBox.getSelectedIndex();
			// the output automaton regular expression panel
			int lengthMin = -1;// the parameter is not set
			int lengthMax = -1;// the parameter is not set
			int resultSizeOfAlphabetMin = -1;
			int resultSizeOfAlphabetMax = -1;
			try
			{ // the input automaton requierements
				numberOfStatesMin = Integer.parseInt(this.type3InputAutomatonStatesMinJTextField.getText());
				numberOfStatesMax = Integer.parseInt(this.type3InputAutomatonStatesMaxJTextField.getText());
				numberOfFinalStatesMin = Integer.parseInt(this.type3InputAutomatonFinalStatesMinJTextField.getText());
				numberOfFinalStatesMax = Integer.parseInt(this.type3InputAutomatonFinalStatesMaxJTextField.getText());
				numberOfTransitionsMin = Integer.parseInt(this.type3InputAutomatonTransitionsMinJTextField.getText());
				numberOfTransitionsMax = Integer.parseInt(this.type3InputAutomatonTransitionsMaxJTextField.getText());
				sizeOfAlphabetMin = Integer.parseInt(this.type3InputAutomatonAlphabetMinJTextField.getText());
				sizeOfAlphabetMax = Integer.parseInt(this.type3InputAutomatonAlphabetMaxJTextField.getText());

				// the optional output regular expression requierements
				if (!(this.type3OutputREAlphabetMinJTextField.getText().isEmpty())
					&& !(this.type3OutputREAlphabetMaxJTextField.getText().isEmpty()))
				{
					resultSizeOfAlphabetMin = Integer.parseInt(this.type3OutputREAlphabetMinJTextField.getText());
					resultSizeOfAlphabetMax = Integer.parseInt(this.type3OutputREAlphabetMaxJTextField.getText());
					if (resultSizeOfAlphabetMin < 0)
					{
						this.showWarningDialog("The output regular expression "
							+ "panel:\nthe size of alphabet min < 0.");
						return;
					}
				}
				if (!(this.type3OutputRELengthMinJTextField.getText().isEmpty())
					&& !(this.type3OutputRELengthMaxJTextField.getText().isEmpty()))
				{
					lengthMin = Integer.parseInt(this.type3OutputRELengthMinJTextField.getText());
					lengthMax = Integer.parseInt(this.type3OutputRELengthMaxJTextField.getText());
					if (lengthMin <= 0)
					{
						this.showWarningDialog("The output regular expression panel:\n"
							+ "length of the regular expression min <= 0.");
						return;
					}
				}
			}
			catch (NumberFormatException e)
			{
				this.showWarningDialog("The fields have to be filled with number >= 0.\n"
					+ "The green fields need not to be filled or have to be filled " + "with number >= 0.");
				return;
			}
			// check the input
			if ((numberOfStatesMin < 0) || (numberOfStatesMax < 0) || (numberOfFinalStatesMin < 0)
				|| (numberOfFinalStatesMax < 0) || (numberOfTransitionsMin < 0) || (numberOfTransitionsMax < 0)
				|| (sizeOfAlphabetMin < 0) || (sizeOfAlphabetMax < 0))
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "the fields have to be filled with number >= 0.");
				return;
			}
			if (numberOfStatesMin > numberOfStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of states min > number of states max.");
				return;
			}
			if (numberOfFinalStatesMin > numberOfFinalStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of final states min > number of final states max.");
				return;
			}
			if (numberOfTransitionsMin > numberOfTransitionsMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of transitions min > number of transitions max.");
				return;
			}
			if (sizeOfAlphabetMin > sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "size of alphabet min > size of alphabet max.");
				return;
			}
			if (numberOfFinalStatesMin > numberOfStatesMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "number of final states min > number of states max.");
				return;
			}
			if (sizeOfAlphabetMin > numberOfTransitionsMax)
			{
				this.showWarningDialog("The input automaton panel:\n"
					+ "size of alphabet min > number of transitions max.");
				return;
			}
			if (numberOfTransitionsMin > numberOfStatesMax * numberOfStatesMax * sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input automaton panel:\n" + "number of transitions min > "
					+ "(number of states max)^2 * (size of alphabet max).");
				return;
			}
			if (resultSizeOfAlphabetMin > resultSizeOfAlphabetMax)
			{
				this.showWarningDialog("The output regular expression panel:\n"
					+ "size of alphabet min > size of alphabet max.");
				return;
			}
			if (resultSizeOfAlphabetMin > sizeOfAlphabetMax)
			{
				this.showWarningDialog("Output size of alphabet min > " + "input size of alphabet max.");
				return;
			}
			if (lengthMin > lengthMax)
			{
				this.showWarningDialog("The output regular expression panel:\n" + "length of regular expression min > "
					+ "length of regular expression max.");
			}
			if (lengthMin > -1 && resultSizeOfAlphabetMax > -1)
			{
				if (resultSizeOfAlphabetMax == 0 && lengthMin > 1)
				{
					this.showWarningDialog("The output regular expression panel:\n"
						+ "size of alphabet max == 0 && (length min > 1).");
					return;
				}
			}
			// (t3 = new T3Generator(numberOfExercises, alphabet, states, sizeOfAlphabetMin, sizeOfAlphabetMax,
			// numberOfStatesMin, numberOfStatesMax, numberOfFinalStatesMin, numberOfFinalStatesMax,
			// numberOfTransitionsMin, numberOfTransitionsMax, resultSizeOfAlphabetMin, resultSizeOfAlphabetMax,
			// lengthMin, lengthMax)).execute();
		}
		// RE -> NFA
		else
		{
			int sizeOfAlphabetMin = 0;
			int sizeOfAlphabetMax = 0;
			int alphabet = this.type3InputReAlphabetJComboBox.getSelectedIndex();
			int states = this.type3OutputAutomatonStatesJComboBox.getSelectedIndex();
			int resultNumberOfStatesMin = 0;
			int resultNumberOfStatesMax = 0;
			int resultNumberOfTransitionsMin = 0;
			int resultNumberOfTransitionsMax = 0;
			// the optional requirements are -1 (not set)
			int lengthMin = -1;
			int lengthMax = -1;
			try
			{
				// input regular expression requierements
				sizeOfAlphabetMin = Integer.parseInt(this.type3InputREAlphabetMinJTextField.getText());
				sizeOfAlphabetMax = Integer.parseInt(this.type3InputREAlphabetMaxJTextField.getText());
				// optional input regular expression requierements
				if (!(this.type3InputRELengthMinJTextField.getText().isEmpty())
					&& !(this.type3InputRELengthMaxJTextField.getText().isEmpty()))
				{
					lengthMin = Integer.parseInt(this.type3InputRELengthMinJTextField.getText());
					lengthMax = Integer.parseInt(this.type3InputRELengthMaxJTextField.getText());
					if (lengthMin < 0)
					{
						this.showWarningDialog("The input regular expression panel:\n"
							+ "length of the regular expression min < 0.");
						return;
					}
				}
				resultNumberOfTransitionsMin = Integer.parseInt(this.type3OutputAutomatonTransitionsMinJTextField
					.getText());
				resultNumberOfTransitionsMax = Integer.parseInt(this.type3OutputAutomatonTransitionsMaxJTextField
					.getText());
				resultNumberOfStatesMin = Integer.parseInt(this.type3OutputAutomatonStatesMinJTextField.getText());
				resultNumberOfStatesMax = Integer.parseInt(this.type3OutputAutomatonStatesMaxJTextField.getText());
			}
			catch (NumberFormatException e)
			{
				this.showWarningDialog("The fields have to be filled with "
					+ "number >= 0.\nThe green fields need not to be filled "
					+ "or have to be filled with number >= 0.");
				return;
			}
			// check input
			if (sizeOfAlphabetMin < 0 || sizeOfAlphabetMax < 0)
			{
				this.showWarningDialog("The input regular expression panel:\n"
					+ "the fields have to be filled with number >= 0.");
			}
			if (lengthMin > lengthMax)
			{
				this.showWarningDialog("The input regular expression panel:\n" + "length of regular expression min > "
					+ "length of regular expression max.");
			}
			if (resultNumberOfStatesMin > resultNumberOfStatesMax)
			{
				this.showWarningDialog("The output automaton panel:\n" + "number of states min > number of states max.");
				return;
			}
			if (resultNumberOfTransitionsMin > resultNumberOfTransitionsMax)
			{
				this.showWarningDialog("The output automaton panel:\n"
					+ "number of transitions min > number of transitions max.");
				return;
			}
			if (sizeOfAlphabetMin > sizeOfAlphabetMax)
			{
				this.showWarningDialog("The input regular expression panel:\n"
					+ "size of alphabet min > size of alphabet max.");
				return;
			}
			if (sizeOfAlphabetMin > resultNumberOfTransitionsMax)
			{
				this.showWarningDialog("The onput automaton panel:\n"
					+ "size of alphabet min > number of transitions max.");
				return;
			}
			if (resultNumberOfTransitionsMin > resultNumberOfStatesMax * resultNumberOfStatesMax * sizeOfAlphabetMax)
			{
				this.showWarningDialog("The output automaton panel:\n" + "number of transitions min > "
					+ "(number of states max)^2 * (size of alphabet max).");
				return;
			}
			if (sizeOfAlphabetMin > resultNumberOfTransitionsMax)
			{
				this.showWarningDialog("alphabetSize_min > numberOfTransitions_max");
			}
			if (resultNumberOfTransitionsMin > resultNumberOfStatesMax * resultNumberOfStatesMax
				* (sizeOfAlphabetMax + 1))
			{
				this.showWarningDialog("numberOfTransitions_min > numberOfStates_max*numberOfStates_max*(alphabetSize_max+ 1)");
			}
			if (resultNumberOfStatesMin < 2)
			{
				this.showWarningDialog("The output automaton panel:\n" + "number of states min < 2");
				return;
			}
			// (t3 = new T3Generator(numberOfExercises, alphabet, states, sizeOfAlphabetMin, sizeOfAlphabetMax,
			// lengthMin,
			// lengthMax, resultNumberOfStatesMin, resultNumberOfStatesMax, resultNumberOfTransitionsMin,
			// resultNumberOfTransitionsMax)).execute();
		}
	}

	/**
	 * shows the the error dialog pane, if the error occures
	 * 
	 * @param message
	 *            the cause of the error
	 */
	private void showErrorDialog(String message)
	{
		javax.swing.JOptionPane.showMessageDialog(this, message, "Error", JOptionPane.ERROR_MESSAGE);
		this.resetStopGenerateButtons();
	}

	/**
	 * shows the warning dialog pane and resets the stop and generate button
	 * 
	 * @param message
	 *            the cause of the proposition
	 */
	private void showWarningDialog(String message)
	{
		javax.swing.JOptionPane.showMessageDialog(this, message, "Warning", JOptionPane.WARNING_MESSAGE);
		this.resetStopGenerateButtons();
	}

	/**
	 * Enables or disables operation ComboBoxes, depending on the value of the parameter b. An enabled component can
	 * respond to user input Components are disabled initially by default.
	 * 
	 * @param enabled
	 *            If true, this component is enabled; otherwise this component is disabled.
	 */
	private void setSelectedPanelEnabled(boolean enabled)
	{
		int i = this.typeJComboBox.getSelectedIndex();
		this.typeJComboBox.setEnabled(enabled);
		switch (i)
		{
			case 0:
				this.type0OperationJComboBox.setEnabled(enabled);
				break;
			case 1:
				this.type1OperationFromJComboBox.setEnabled(enabled);
				this.type1OperationToJComboBox.setEnabled(enabled);
				break;
			case 2:
				this.type2OperationJComboBox.setEnabled(enabled);
				break;
			case 3:
				this.type3OperationJComboBox.setEnabled(enabled);
				break;
		}
	}

	private JTextArea getSelectedArea()
	{
		int i = this.outputJTabbedPane.getSelectedIndex();
		switch (i)
		{
			case 0:
				return this.plainTextJTextArea;
			case 1:
				return this.latexJTextArea;
			case 2:
				return this.isJTextArea;
			case 3:
				return this.plainTextENJTextArea;
			case 4:
				return this.latexENJTextArea;
			default:
				return this.isENJTextArea;
		}
	}

	/**
	 * @param args
	 *            the command line arguments
	 */
	public static void main(String args[])
	{
		java.awt.EventQueue.invokeLater(new Runnable()
		{
			public void run()
			{
				new ExerciseGeneratorGUI().setVisible(true);
			}
		});
	}

	// Variables declaration - do not modify//GEN-BEGIN:variables
	private javax.swing.JLabel completedExercisesJLabel;
	private javax.swing.JButton copyAllJButton;
	private javax.swing.JButton copyJButton;
	private javax.swing.JLabel exercisesJLabel;
	private javax.swing.JTextField exercisesJTextField;
	private javax.swing.JButton generateJButton;
	private javax.swing.JPanel generatingJPanel;
	private javax.swing.JScrollPane isENJScrollPane;
	private javax.swing.JTextArea isENJTextArea;
	private javax.swing.JScrollPane isJScrollPane;
	private javax.swing.JTextArea isJTextArea;
	private javax.swing.JProgressBar jProgressBar;
	private javax.swing.JScrollPane latexENJScrollPane;
	private javax.swing.JTextArea latexENJTextArea;
	private javax.swing.JScrollPane latexJScrollPane;
	private javax.swing.JTextArea latexJTextArea;
	private javax.swing.JTabbedPane outputJTabbedPane;
	private javax.swing.JScrollPane plainTextENJScrollPane;
	private javax.swing.JTextArea plainTextENJTextArea;
	private javax.swing.JScrollPane plainTextJScrollPane;
	private javax.swing.JTextArea plainTextJTextArea;
	private javax.swing.JLabel progressJLabel;
	private javax.swing.JButton saveAllJButton;
	private javax.swing.JButton saveJButton;
	private javax.swing.JButton stopJButton;
	private javax.swing.JComboBox type0AlphabetJComboBox;
	private javax.swing.JLabel type0Automaton1AlphabetJLabel;
	private javax.swing.JLabel type0Automaton1AlphabetMaxJLabel;
	private javax.swing.JTextField type0Automaton1AlphabetMaxJTextField;
	private javax.swing.JLabel type0Automaton1AlphabetMinJLabel;
	private javax.swing.JTextField type0Automaton1AlphabetMinJTextField;
	private javax.swing.JRadioButton type0Automaton1CoJRadioButton;
	private javax.swing.JLabel type0Automaton1FinalStatesJLabel;
	private javax.swing.JLabel type0Automaton1FinalStatesMaxJLabel;
	private javax.swing.JTextField type0Automaton1FinalStatesMaxJTextField;
	private javax.swing.JLabel type0Automaton1FinalStatesMinJLabel;
	private javax.swing.JTextField type0Automaton1FinalStatesMinJTextField;
	private javax.swing.JPanel type0Automaton1JPanel;
	private javax.swing.JRadioButton type0Automaton1JRadioButton;
	private javax.swing.JComboBox type0Automaton1StatesJComboBox;
	private javax.swing.JLabel type0Automaton1StatesJLabel;
	private javax.swing.JLabel type0Automaton1StatesMaxJLabel;
	private javax.swing.JTextField type0Automaton1StatesMaxJTextField;
	private javax.swing.JLabel type0Automaton1StatesMinJLabel;
	private javax.swing.JTextField type0Automaton1StatesMinJTextField;
	private javax.swing.JCheckBox type0Automaton1TotalTransitionFunctionJCheckBox;
	private javax.swing.JLabel type0Automaton1TransitionsJLabel;
	private javax.swing.JLabel type0Automaton1TransitionsMaxJLabel;
	private javax.swing.JTextField type0Automaton1TransitionsMaxJTextField;
	private javax.swing.JLabel type0Automaton1TransitionsMinJLabel;
	private javax.swing.JTextField type0Automaton1TransitionsMinJTextField;
	private javax.swing.ButtonGroup type0Automaton1buttonGroup;
	private javax.swing.JRadioButton type0Automaton2CoJRadioButton;
	private javax.swing.JLabel type0Automaton2FinalStatesJLabel;
	private javax.swing.JLabel type0Automaton2FinalStatesMaxJLabel;
	private javax.swing.JTextField type0Automaton2FinalStatesMaxJTextField;
	private javax.swing.JLabel type0Automaton2FinalStatesMinJLabel;
	private javax.swing.JTextField type0Automaton2FinalStatesMinJTextField;
	private javax.swing.JPanel type0Automaton2JPanel;
	private javax.swing.JRadioButton type0Automaton2JRadioButton;
	private javax.swing.JComboBox type0Automaton2StatesJComboBox;
	private javax.swing.JLabel type0Automaton2StatesJLabel;
	private javax.swing.JLabel type0Automaton2StatesMaxJLabel;
	private javax.swing.JTextField type0Automaton2StatesMaxJTextField;
	private javax.swing.JLabel type0Automaton2StatesMinJLabel;
	private javax.swing.JTextField type0Automaton2StatesMinJTextField;
	private javax.swing.JCheckBox type0Automaton2TotalTransitionFunctionJCheckBox;
	private javax.swing.JLabel type0Automaton2TransitionsJLabel;
	private javax.swing.JLabel type0Automaton2TransitionsMaxJLabel;
	private javax.swing.JTextField type0Automaton2TransitionsMaxJTextField;
	private javax.swing.JLabel type0Automaton2TransitionsMinJLabel;
	private javax.swing.JTextField type0Automaton2TransitionsMinJTextField;
	private javax.swing.ButtonGroup type0Automaton2buttonGroup;
	private javax.swing.JPanel type0JPanel;
	private javax.swing.JComboBox type0OperationJComboBox;
	private javax.swing.JPanel type0OperationJPanel;
	private javax.swing.JPanel type0OutputAutomatonJPanel;
	private javax.swing.JCheckBox type0OutputAutomatonMinOneFinalStateJCheckBox;
	private javax.swing.JLabel type0OutputAutomatonStatesJLabel;
	private javax.swing.JLabel type0OutputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type0OutputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type0OutputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type0OutputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type0OutputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type0OutputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type0OutputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type0OutputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type0OutputAutomatonTransitionsMinJTextField;
	private javax.swing.JPanel type1InputAutomantonJPanel;
	private javax.swing.JComboBox type1InputAutomatonAlphabetJComboBox;
	private javax.swing.JLabel type1InputAutomatonAlphabetJLabel;
	private javax.swing.JLabel type1InputAutomatonAlphabetMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonAlphabetMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonAlphabetMinJLabel;
	private javax.swing.JTextField type1InputAutomatonAlphabetMinJTextField;
	private javax.swing.JLabel type1InputAutomatonFinalStatesJLabel;
	private javax.swing.JLabel type1InputAutomatonFinalStatesMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonFinalStatesMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonFinalStatesMinJLabel;
	private javax.swing.JTextField type1InputAutomatonFinalStatesMinJTextField;
	private javax.swing.JCheckBox type1InputAutomatonFirstStateJCheckBox;
	private javax.swing.JComboBox type1InputAutomatonStatesJComboBox;
	private javax.swing.JLabel type1InputAutomatonStatesJLabel;
	private javax.swing.JLabel type1InputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type1InputAutomatonStatesMinJTextField;
	private javax.swing.JCheckBox type1InputAutomatonTotalTransitionFunctionJCheckBox;
	private javax.swing.JLabel type1InputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type1InputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type1InputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type1InputAutomatonUnreachableStates1JLabel;
	private javax.swing.JLabel type1InputAutomatonUnreachableStates2jLabel;
	private javax.swing.JLabel type1InputAutomatonUnreachableStatesMaxJLabel;
	private javax.swing.JTextField type1InputAutomatonUnreachableStatesMaxJTextField;
	private javax.swing.JLabel type1InputAutomatonUnreachableStatesMinJLabel;
	private javax.swing.JTextField type1InputAutomatonUnreachableStatesMinJTextField;
	private javax.swing.JPanel type1JPanel;
	private javax.swing.JPanel type1MinimizationJPanel;
	private javax.swing.JCheckBox type1MinimizationStepsJCheckBox;
	private javax.swing.JLabel type1MinimizationStepsJLabel;
	private javax.swing.JLabel type1MinimizationStepsMaxJLabel;
	private javax.swing.JTextField type1MinimizationStepsMaxJTextField;
	private javax.swing.JLabel type1MinimizationStepsMinJLabel;
	private javax.swing.JTextField type1MinimizationStepsMinJTextField;
	private javax.swing.JComboBox type1OperationFromJComboBox;
	private javax.swing.JLabel type1OperationFromJLabel;
	private javax.swing.JPanel type1OperationJPanel;
	private javax.swing.JComboBox type1OperationToJComboBox;
	private javax.swing.JLabel type1OperationToJLabel;
	private javax.swing.JPanel type1OutputAutomatonJPanel;
	private javax.swing.JLabel type1OutputAutomatonStatesJLabel;
	private javax.swing.JLabel type1OutputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type1OutputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type1OutputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type1OutputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type1OutputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type1OutputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type1OutputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type1OutputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type1OutputAutomatonTransitionsMinJTextField;
	private javax.swing.JComboBox type2InputAutomatonAlphabetJComboBox;
	private javax.swing.JLabel type2InputAutomatonAlphabetJLabel;
	private javax.swing.JLabel type2InputAutomatonAlphabetMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonAlphabetMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonAlphabetMinJLabel;
	private javax.swing.JTextField type2InputAutomatonAlphabetMinJTextField;
	private javax.swing.JLabel type2InputAutomatonFinalStatesJLabel;
	private javax.swing.JLabel type2InputAutomatonFinalStatesMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonFinalStatesMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonFinalStatesMinJLabel;
	private javax.swing.JTextField type2InputAutomatonFinalStatesMinJTextField;
	private javax.swing.JPanel type2InputAutomatonJPanel;
	private javax.swing.JComboBox type2InputAutomatonStatesJComboBox;
	private javax.swing.JLabel type2InputAutomatonStatesJLabel;
	private javax.swing.JLabel type2InputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type2InputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type2InputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type2InputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type2InputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type2InputAutomatonUnreachableStates1JLabel;
	private javax.swing.JLabel type2InputAutomatonUnreachableStates2JLabel;
	private javax.swing.JLabel type2InputAutomatonUnreachableStatesMaxJLabel;
	private javax.swing.JTextField type2InputAutomatonUnreachableStatesMaxJTextField;
	private javax.swing.JLabel type2InputAutomatonUnreachableStatesMinJLabel;
	private javax.swing.JTextField type2InputAutomatonUnreachableStatesMinJTextField;
	private javax.swing.JCheckBox type2InputGrammarEpsilonJCheckBox;
	private javax.swing.JPanel type2InputGrammarJPanel;
	private javax.swing.JLabel type2InputGrammarRulesJLabel;
	private javax.swing.JLabel type2InputGrammarRulesMaxJLabel;
	private javax.swing.JTextField type2InputGrammarRulesMaxJTextField;
	private javax.swing.JLabel type2InputGrammarRulesMinJLabel;
	private javax.swing.JTextField type2InputGrammarRulesMinJTextField;
	private javax.swing.JComboBox type2InputGrammarTerminalsJComboBox;
	private javax.swing.JLabel type2InputGrammarTerminalsJLabel;
	private javax.swing.JLabel type2InputGrammarTerminalsMaxJLabel;
	private javax.swing.JTextField type2InputGrammarTerminalsMaxJTextField;
	private javax.swing.JLabel type2InputGrammarTerminalsMinJLabel;
	private javax.swing.JTextField type2InputGrammarTerminalsMinJTextField;
	private javax.swing.JComboBox type2InputGrammarVariablesJComboBox;
	private javax.swing.JLabel type2InputGrammarVariablesJLabel;
	private javax.swing.JLabel type2InputGrammarVariablesMaxJLabel;
	private javax.swing.JTextField type2InputGrammarVariablesMaxJTextField;
	private javax.swing.JLabel type2InputGrammarVariablesMinJLabel;
	private javax.swing.JTextField type2InputGrammarVariablesMinJTextField;
	private javax.swing.JLayeredPane type2JLayeredPane;
	private javax.swing.JPanel type2JPanel;
	private javax.swing.JComboBox type2OperationJComboBox;
	private javax.swing.JLabel type2OperationJLabel;
	private javax.swing.JLabel type2OutputAutomatonAlphabetJLabel;
	private javax.swing.JLabel type2OutputAutomatonAlphabetMaxJLabel;
	private javax.swing.JTextField type2OutputAutomatonAlphabetMaxJTextField;
	private javax.swing.JLabel type2OutputAutomatonAlphabetMinJLabel;
	private javax.swing.JTextField type2OutputAutomatonAlphabetMinJTextField;
	private javax.swing.JPanel type2OutputAutomatonJPanel;
	private javax.swing.JLabel type2OutputAutomatonStatesJLabel;
	private javax.swing.JLabel type2OutputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type2OutputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type2OutputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type2OutputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type2OutputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type2OutputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type2OutputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type2OutputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type2OutputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type2OutputAutomatonUnreachableStates1JLabel;
	private javax.swing.JLabel type2OutputAutomatonUnreachableStates2JLabel;
	private javax.swing.JLabel type2OutputAutomatonUnreachableStatesMaxJLabel;
	private javax.swing.JTextField type2OutputAutomatonUnreachableStatesMaxJTextField;
	private javax.swing.JLabel type2OutputAutomatonUnreachableStatesMinJLabel;
	private javax.swing.JTextField type2OutputAutomatonUnreachableStatesMinJTextField;
	private javax.swing.JCheckBox type2OutputGRammarEpsilonJCheckBox;
	private javax.swing.JPanel type2OutputGrammarJPanel;
	private javax.swing.JLabel type2OutputGrammarRulesJLabel;
	private javax.swing.JLabel type2OutputGrammarRulesMaxJLabel;
	private javax.swing.JTextField type2OutputGrammarRulesMaxJTextField;
	private javax.swing.JLabel type2OutputGrammarRulesMinJLabel;
	private javax.swing.JTextField type2OutputGrammarRulesMinJTextField;
	private javax.swing.JLabel type2OutputGrammarTerminalsJLabel;
	private javax.swing.JLabel type2OutputGrammarTerminalsMaxJLabel;
	private javax.swing.JTextField type2OutputGrammarTerminalsMaxJTextField;
	private javax.swing.JLabel type2OutputGrammarTerminalsMinJLabel;
	private javax.swing.JTextField type2OutputGrammarTerminalsMinJTextField;
	private javax.swing.JLabel type2OutputGrammarVariablesJLabel;
	private javax.swing.JLabel type2OutputGrammarVariablesMaxJLabel;
	private javax.swing.JTextField type2OutputGrammarVariablesMaxJTextField;
	private javax.swing.JLabel type2OutputGrammarVariablesMinJLabel;
	private javax.swing.JTextField type2OutputGrammarVariablesMinJTextField;
	private javax.swing.JComboBox type3InputAutomatonAlphabetJComboBox;
	private javax.swing.JLabel type3InputAutomatonAlphabetJLabel;
	private javax.swing.JLabel type3InputAutomatonAlphabetMaxJLabel;
	private javax.swing.JTextField type3InputAutomatonAlphabetMaxJTextField;
	private javax.swing.JLabel type3InputAutomatonAlphabetMinJLabel;
	private javax.swing.JTextField type3InputAutomatonAlphabetMinJTextField;
	private javax.swing.JLabel type3InputAutomatonFinalStatesJLabel;
	private javax.swing.JLabel type3InputAutomatonFinalStatesMaxJLabel;
	private javax.swing.JTextField type3InputAutomatonFinalStatesMaxJTextField;
	private javax.swing.JLabel type3InputAutomatonFinalStatesMinJLabel;
	private javax.swing.JTextField type3InputAutomatonFinalStatesMinJTextField;
	private javax.swing.JPanel type3InputAutomatonJPanel;
	private javax.swing.JComboBox type3InputAutomatonStatesJComboBox;
	private javax.swing.JLabel type3InputAutomatonStatesJLabel;
	private javax.swing.JLabel type3InputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type3InputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type3InputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type3InputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type3InputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type3InputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type3InputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type3InputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type3InputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type3InputREAlphabetJLabel;
	private javax.swing.JLabel type3InputREAlphabetMaxJLabel;
	private javax.swing.JTextField type3InputREAlphabetMaxJTextField;
	private javax.swing.JLabel type3InputREAlphabetMinJLabel;
	private javax.swing.JTextField type3InputREAlphabetMinJTextField;
	private javax.swing.JPanel type3InputREJPanel;
	private javax.swing.JLabel type3InputRELengthJLabel;
	private javax.swing.JLabel type3InputRELengthMaxJLabel;
	private javax.swing.JTextField type3InputRELengthMaxJTextField;
	private javax.swing.JLabel type3InputRELengthMinJLabel;
	private javax.swing.JTextField type3InputRELengthMinJTextField;
	private javax.swing.JComboBox type3InputReAlphabetJComboBox;
	private javax.swing.JPanel type3JPanel;
	private javax.swing.JComboBox type3OperationJComboBox;
	private javax.swing.JLabel type3OperationJLabel;
	private javax.swing.JPanel type3OutputAutomatonJPanel;
	private javax.swing.JComboBox type3OutputAutomatonStatesJComboBox;
	private javax.swing.JLabel type3OutputAutomatonStatesJLabel;
	private javax.swing.JLabel type3OutputAutomatonStatesMaxJLabel;
	private javax.swing.JTextField type3OutputAutomatonStatesMaxJTextField;
	private javax.swing.JLabel type3OutputAutomatonStatesMinJLabel;
	private javax.swing.JTextField type3OutputAutomatonStatesMinJTextField;
	private javax.swing.JLabel type3OutputAutomatonTransitionsJLabel;
	private javax.swing.JLabel type3OutputAutomatonTransitionsMaxJLabel;
	private javax.swing.JTextField type3OutputAutomatonTransitionsMaxJTextField;
	private javax.swing.JLabel type3OutputAutomatonTransitionsMinJLabel;
	private javax.swing.JTextField type3OutputAutomatonTransitionsMinJTextField;
	private javax.swing.JLabel type3OutputREAlphabetJLabel;
	private javax.swing.JLabel type3OutputREAlphabetMaxJLabel;
	private javax.swing.JTextField type3OutputREAlphabetMaxJTextField;
	private javax.swing.JLabel type3OutputREAlphabetMinJLabel;
	private javax.swing.JTextField type3OutputREAlphabetMinJTextField;
	private javax.swing.JPanel type3OutputREJPanel;
	private javax.swing.JLabel type3OutputRELengthJLabel;
	private javax.swing.JLabel type3OutputRELengthMaxJLabel;
	private javax.swing.JTextField type3OutputRELengthMaxJTextField;
	private javax.swing.JLabel type3OutputRELengthMinJLabel;
	private javax.swing.JTextField type3OutputRELengthMinJTextField;
	private javax.swing.JLayeredPane type3jLayeredPane;
	private javax.swing.JComboBox typeJComboBox;
	private javax.swing.JLayeredPane typeJLayeredPane;
	// End of variables declaration//GEN-END:variables

}
